'\ 0'保证为0吗?

时间:2011-09-25 22:54:18

标签: c nul

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

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

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

4 个答案:

答案 0 :(得分:14)

标准说:

  

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

答案 1 :(得分:13)

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

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

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

使用isspace()功能。

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

答案 2 :(得分:3)

在C中,'\0'具有完全相同的值,并且类型0。没有理由写'\0',除了uglify你的代码。但是,\0可能在双引号内用于创建带有嵌入空字节的字符串。

答案 3 :(得分:0)

ASCII标准规定NUL字符编码为字节0。除非你停止使用向后兼容ASCII的编码,否则什么都不会出错。