检查char*中的空终止字符。

8

我只是试图查看如何在 char * 数组中检查空终止字符,但失败了。我可以使用 for 循环过程找到长度,其中您可以继续检查每个元素,但我想只使用 while 循环并找到空终止字符串。我似乎从未退出 while 循环。有什么原因吗?

char* forward = "What is up";
int forward_length = 0;
while (*(forward++)!='/0') {
    forward_length++;
    printf("Character %d", forward_length);
}

12
你是否收到了有关多字符常量的警告?你使用了错误的反斜杠,应该是 '\0' 而不是 '/0' - Musa
声明 forward_length 为寄存器类有时也可能会很有用。 - Ram
4个回答

24
你使用了'/0'而不是'\0'。这是不正确的: '\0'是空字符,而'/0'是多字符文字。
此外,在C语言中,跳过条件中的零是可以的:
while (*(forward++)) {
    ...
}

这是一种有效的检查字符、整数、指针等是否为零的方法。


15

空字符是 '\0',而不是 '/0'

while (*(forward++) != '\0')

9
为了让这个完整:虽然其他人现在已经解决了你的问题 :),但我想给你一条好建议:不要重复造轮子
size_t forward_length = strlen(forward);

如何使用 size_t 逻辑? - vkaul11
@vkaul11 你说的“使用这个size_t逻辑”是什么意思? - user529758
@H2CO3 抱歉,但编写预定义函数的代码始终是一个好习惯。 - A.s. Bhullar

7

你的'/0'应该是'\0',斜杠反了/倾斜的方向错误。你的while应该像这样:

while (*(forward++)!='\0') 

尽管在此处表达式的!= '\0'部分是可选的,因为只要它评估为非零(null被认为是零并将终止循环),循环就会继续。

所有“特殊”字符(即,非可打印字符的转义序列)都使用反斜杠,例如制表符'\t'或换行符'\n',对于null '\0'也是如此,这样很容易记住。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接