我在C中编写了这个函数,它意味着将字符串迭代到下一个非空白字符:
char * iterate_through_whitespace(unsigned char * i){
while(*i && *(i++) <= 32);
return i-1;
}
它似乎工作得很好,但我想知道在*i
的情况下假设*i == '\0'
将被评估为false是否安全,并且它不会迭代超出一个字符串的结尾。它在我的计算机上运行良好,但我想知道在其他机器上编译它是否会表现相同。
答案 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的编码,否则什么都不会出错。