'\ 0'保证为0吗?

Pau*_*aul 20 c nul

我在C中编写了这个函数,它意味着将字符串迭代到下一个非空白字符:

char * iterate_through_whitespace(unsigned char * i){
    while(*i && *(i++) <= 32);
    return i-1;
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作得很好,但我想知道是否可以安全地假设*i在这种情况下将被评估为false *i == '\0',并且它不会迭代超出字符串的结尾.它在我的计算机上运行良好,但我想知道在其他机器上编译它是否会表现相同.

cni*_*tar 14

标准说:

所有位都设置为0的字节,称为空字符,应存在于基本执行字符集中; 它用于终止字符串.

  • 你必须深入研究[C99](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)6.2.6.2,它涵盖了整数类型的表示.它需要二进制表示(它定义)并表示字符类型没有填充位. (2认同)

Kei*_*son 13

是的 - 但在我看来,更明确的是更好的风格:

while (*i != '\0' && ...
Run Code Online (Sandbox Code Playgroud)

但这种比较32并不是最好的方法. 32恰好是空格字符的ASCII/Unicode代码,但C不保证任何特定的字符集 - 并且有很多控制字符的值小于32而不是空格.

使用该isspace()功能.

(我永远不会指出一个指针i.)