【发布时间】:2020-05-11 08:10:15
【问题描述】:
char *strchr( const char *s, int c );
我知道 strchr 在字符串 s 中定位字符 c 的第一次出现。如果找到c,则返回指向s 中的c 的指针。否则,将返回 NULL 指针。
那么为什么下面的代码输出 num 到 strlen(string) 而不是它的设计目的呢?
num=0;
while((strchr(string,letter))!=NULL)
{
num++;
string++;
}
但是这段代码给出了正确的输出
num=0;
while((string=strchr(string,letter))!=NULL)
{
num++;
string++;
}
我不明白为什么将返回的指针分配给另一个合格的指针甚至会产生影响。我只是测试返回值是否为 NULL 指针。
【问题讨论】:
-
关于
strchr( const char *s, int c )的其他说明:搜索到的字符串 包含null 字符,因此strchr(some_strings, 0)永远不会返回NULL。搜索就像*s和ch转换为unsigned char一样完成。 -
这就是我的看法:返回指向第一个
\0的指针,即在字符串的末尾。由于此时(string=strchr(string, letter))!=NULL为真,string++将出现,并且字符串将指向超出其分配的内存。这是否会导致某种奇怪的行为永远不会返回NULL?还是我在这里走错了路? -
Leon,
letter的值是 null 字符 是不太可能的情况。但如果代码确实需要处理这个问题,可以使用while((string=strchr(string,letter))!=NULL && *string)。