usar online length como c string strlen

c - length - strlen online



strlen-la longitud de la cuerda a veces se incrementa en 1 (1)

Estoy haciendo algunas preguntas de C En la mayoría de los casos, puedo encontrar la respuesta correcta, pero con eso estoy teniendo problemas. Sé la respuesta correcta usando el compilador, pero no sé la razón.

Echa un vistazo al código:

char c[] = "abc/012/0x34";

¿Qué strlen(c) con un compilador estándar de C?

Mi compilador devuelve 4 cuando lo que esperaba era 3.

Lo que pensé es que strlen() buscaría la primera aparición del carácter NULL pero de alguna manera el resultado es uno más de lo que esperaba.

¿Alguna idea de por qué?


Vamos a escribir

char c[] = "abc/012/0x34";

con caracteres individuales:

char c[] = { ''a'', ''b'', ''c'', ''/012'', ''/0'', ''x'', ''3'', ''4'', ''/0'' };

El primer /0 que ve es el comienzo de una secuencia de escape octal /012 que se extiende sobre los siguientes dígitos octales.

Las secuencias de escape octales se especifican en la sección 6.4.4.4 del estándar (borrador N1570):

secuencia de escape octal
/ octal dígito
/ octal-digit octal-digit
octal dígito octal dígito octal dígito

consisten en una barra invertida seguida de uno, dos o tres dígitos octales. En el párrafo 7 de esa sección, se da la extensión de las secuencias de escape octal y hexadecimal:

7 Cada secuencia de escape octal o hexadecimal es la secuencia más larga de caracteres que puede constituir la secuencia de escape.

Tenga en cuenta que si bien la longitud de una secuencia de escape octal se limita a un máximo de tres dígitos octales (por lo tanto, "/123456" consta de cinco caracteres, { ''/123'', ''4'', ''5'', ''6'', ''/0'' } ), las secuencias de escape hexadecimales tienen una longitud ilimitada

secuencia de escape hexadecimal
/x hexadecimal dígito
hexadecimal-escape-sequence hexadecimal-digit

y, por lo tanto, "/x123456789abcdef" consta de solo dos caracteres ( { ''/x123456789abcdef'', ''/0'' } ).