我用 C 编写了这个函数,它的目的是遍历一个字符串到下一个非空白字符:
char * iterate_through_whitespace(unsigned char * i){
while(*i && *(i++) <= 32);
return i-1;
}
它似乎工作得很好,但我想知道是否可以安全地假设*i
在这种情况下将被评估为假*i == '\0'
,并且它不会迭代到字符串的末尾。它在我的计算机上运行良好,但我想知道它在其他机器上编译时是否会表现相同。
标准说:
一个所有位都设置为 0 的字节,称为空字符,应存在于基本执行字符集中;它用于终止一个字符串。
是的——但在我看来,更明确的风格更好:
while (*i != '\0' && ...
但与 to 进行比较32
并不是最好的方法。 32
恰好是空格字符的 ASCII/Unicode 代码,但 C 不保证任何特定的字符集——并且有很多值小于 32 的控制字符不是空格。
使用该isspace()
功能。
(而且我永远不会命名指针i
。)
在 C 中,'\0'
具有与 完全相同的值和类型0
。'\0'
除了丑化你的代码之外,没有任何理由去写。\0
然而,在双引号内可能有用,以制作嵌入空字节的字符串。
ASCII 标准规定 NUL 字符被编码为 byte 0
。除非您停止使用向后兼容 ASCII 的编码,否则不会出错。