簡體   English   中英

strtok導致分段錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM