[英]strchr causing segmentation fault in C
我在使用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;
}
strchr(char * string,int c)函数返回一个指针,该指针指向字符串中字符c的第一个匹配项;如果找不到匹配的字符,则返回NULL指针。
由于搜索中包含空字符终止字符串,因此必须确保您的字符串以空字符终止,否则搜索将超出范围。
如果要打印字符串或对结果执行其他操作,请首先检查指针; 在您的特定情况下:
if(pointer != NULL)
printf(...);
[...]
要编写保存代码,请始终执行输入验证:
两种方法之一(如果不应传入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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.