我是编程新手,无法获取下面的代码。该程序检查字符c
是否在字符串s
中。
int is_in(char *s, char c){
while(*s){
if(*s==c) return 1;
else s++;
return 0;
}
最让我感到困惑的是,while
循环将如何停止,因为我认为s++
会在字符串结尾之后遍历整个内存。谁能解释一下?如果我错了,请纠正我。
答案 0 :(得分:3)
当Pet
为0时,即在NUL终止的字符串的末尾,循环停止。
在C语言中对字符串建模的惯用方式是用0终止。请注意,如果不是以这种方式形成*s
,则函数的行为为未定义。
我个人更希望该函数为s
,以便向调用者表示该函数不会修改字符串。
答案 1 :(得分:1)
您的直觉认为指针s
将无限期地循环,如果不是出于两件事,您将是正确的:
'\0'
)终止。这是处理字符串的函数的哨兵值。这是必要的,因为当数组传递给函数时,它会衰减为指向其第一个元素的指针,从而丢失长度信息。while(*s)
将为false。实际上,while(*s) { loop-body; s++; }
是C语言中用于处理字符串的众所周知的习语。
答案 2 :(得分:0)
字符串char *s
应该以结束NUL
结尾。 NUL
的值为零。 *s
最终应该“扩展”到零。