[英]strtok is causing a Segmentation Fault
我必須獲取字符串中的第三個單詞,並想要使用strtok 。 現在,第一個printf起作用了,但是之后我得到了Seg Fault。 因此tokenizedString = strtok(NULL, " ");
一定是造成問題的原因吧?
僅出於上下文考慮:我正在尋找字符串中的第三個單詞,並且單詞之間可以有盡可能多的空格。
#include <string.h>
#include <stdio.h>
char *tokenizeString(char *userCommand)
{
char *tokenizedString;
int counterForToken;
tokenizedString = strtok(userCommand, " ");
for(counterForToken = 0; counterForToken != 3; counterForToken++)
{
printf("%s\n", tokenizedString);
tokenizedString = strtok(NULL, " ");
if(tokenizedString == NULL)
{
break;
}
}
printf("%s\n", tokenizedString);
return tokenizedString;
}
int main(void)
{
char userCommand[255] = {0};
fgets(userCommand, sizeof(userCommand), stdin);
tokenizeString(userCommand);
}
現在,第一個printf起作用了,但是之后我得到了Seg Fault。 因此
tokenizedString = strtok(NULL, " ");
一定是造成問題的原因吧?
不,這是非常差的相關性。 實際上,問題出在對printf
的第二次調用中。 當tokenizedString == NULL
時,可以將其傳遞給tokenizedString
。 指定格式為%s
,以期望有效的指針指向零終止字符數組的第一個字符。 傳遞NULL
是非法的,並導致不確定的行為(例如,導致崩潰)。 解決方法很簡單:檢查空指針值。 當然,這也適用於循環的第一次迭代
char *tokenizeString(char *userCommand)
{
char *tokenizedString;
int counterForToken;
tokenizedString = strtok(userCommand, " ");
for(counterForToken = 0; counterForToken != 3 && tokenizedString != NULL; counterForToken++)
{
printf("%s\n", tokenizedString);
tokenizedString = strtok(NULL, " ");
}
if(tokenizedString != NULL)
printf("%s\n", tokenizedString);
return tokenizedString;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.