首页 > 解决方案 > 无法理解这个 C 程序

问题描述

我是编程新手,没有得到下面的代码。该程序检查字符串中是否有c字符s

int is_in(char *s, char c){
  while(*s){
    if(*s==c) return 1;
    else s++;
  return 0;
}

让我感到困惑的主要事情是,while循环将如何停止,因为我认为s++在字符串结束之后也会遍历整个内存。任何人都可以解释一下吗?如果我错了,请纠正我。

标签: cpointers

解决方案


循环在为 0 时停止*s,即在以 NUL 结尾的字符串的末尾。

在 C 中建模字符串的惯用方法是用 0终止它们。请注意,如果s不是以这种方式形成的,那么函数的行为是undefined

就个人而言,我更喜欢该函数向int is_in(const char *s, char c)调用者表明该函数不会修改字符串。


推荐阅读