trap tag responder preguntas para las hacer con canciones amigos c nul

responder - tags para hacer con amigos



¿Está garantizado ''/ 0'' para ser 0? (4)

Escribí esta función en C, que tiene la intención de iterar a través de una cadena hasta el siguiente carácter que no sea un espacio en blanco:

char * iterate_through_whitespace(unsigned char * i){ while(*i && *(i++) <= 32); return i-1; }

Parece funcionar bastante bien, pero me pregunto si es seguro asumir que el *i será evaluado como falso en la situación que *i == ''/0'' , y no se repetirá más allá del final de una cuerda. Funciona bien en mi computadora, pero me pregunto si se comportará de la misma manera cuando se compile en otras máquinas.


El estándar ASCII dicta que el carácter NUL se codifique como el byte 0 . A menos que deje de trabajar con codificaciones compatibles hacia atrás con ASCII, nada debería salir mal.


En C, ''/0'' tiene exactamente el mismo valor y tipo que 0 . No hay ninguna razón para escribir ''/0'' excepto para uglificar su código. Sin embargo, /0 podría ser útil dentro de comillas dobles para hacer cadenas con bytes nulos incrustados.


La norma dice:

Un byte con todos los bits establecidos en 0, llamado el carácter nulo, deberá existir en el conjunto de caracteres de ejecución básicos; se utiliza para terminar una cadena de caracteres.


Sí, pero en mi opinión es mejor estilo para ser más explícito:

while (*i != ''/0'' && ...

Pero la comparación con 32 no es el mejor enfoque. 32 es el código ASCII / Unicode para el carácter de espacio, pero C no garantiza ningún conjunto de caracteres en particular, y hay muchos caracteres de control con valores menores a 32 que no son espacios en blanco.

Utilice la función isspace() .

(Y yo nunca nombraría un puntero i .)