我遇到了C程序的问题。
我知道strchr()
导致了问题,而且它正在返回
分段错误
我的代码如下:
char *pointer;
pointer = strchr(string, character);
我不知道为什么我收到错误消息。 我可以猜到的一件事是我的字符串'有时候不包含这个角色。这可能是原因吗?
我怎么能阻止它,因为我无法控制输入字符串?
完整代码
int index(const char *string, char character)
{
const char *pointer;
pointer = strchr(string, character);
if(pointer)
return (pointer - string);
else
return -1;
}
答案 0 :(得分:0)
答案 1 :(得分:0)
strchr(char * string,int c)函数返回指向字符串中第一个出现的字符 c 的指针,如果找不到匹配的字符则返回NULL指针
由于搜索中包含空字符终止字符串,因此必须确保字符串以空值终止,否则搜索超出范围。
如果您要打印字符串或对结果执行其他操作,请先检查指针;在你的具体情况:
if(pointer != NULL)
printf(...);
[...]
答案 2 :(得分:0)
要编写保存代码始终执行输入验证:
要么艰难(如果NULL
不应该被传入):
ssize_t index(const char * string, const char character)
{
assert(NULL != string);
const char * pointer = strchr(string, character);
if (pointer)
{
return (pointer - string);
}
else
{
return -1;
}
}
顺畅的方式(以NULL
的方式静默处理""
):
ssize_t index(const char * string, const char character)
{
const char * pointer = NULL;
if (string)
{
pointer = strchr(string, character);
}
if (pointer)
{
return (pointer - string);
}
else
{
return -1;
}
}