[英]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.