0
我正在寫一個包含以下循環的函數。該段從包含多行文本的文本文件中讀取,其中每行包含一個單詞和\ r \ n個字符。對strlen(NULL)進行條件檢查會導致分段錯誤
int strSize = 100;
char* sPtr = (char*)malloc(strSize*sizeof(char));
char* tPtr = (char*)malloc(strSize*sizeof(char));
FILE* fp = fopen("someTextFile.txt","r");
fgets(sPtr, strSize, fp); //Read in first line
while(sPtr != NULL) {
tPtr = strtok(sPtr, "\r\n"); //There's one word per line, which terminates with \r\n
if(strlen(tPtr) > 0)
{
... Do stuff
}
sPtr = fgets(sPtr, strSize, fp); //Read next line, if fgets() reaches EOF, then sPtr <= NULL
}
有問題的一行是:if(strlen(tPtr) > 0)
。如果tPtr爲NULL,那麼這條線會導致seg。故障(奇怪地呼叫strlen(tPtr)
不會導致seg故障)。
無論如何,我認爲這不會是一個問題,因爲sPtr在NULL循環的開始處被檢查。顯然,strtok(sPtr, "\r\n")
在sPtr上運行後,對於某些非NULL sPtr,您將獲得NULL。但我不明白這是如何發生的。
可能出現[分割故障的常見原因的確定列表](http://stackoverflow.com/questions/33047452/definitive-list-of-common-reasons-for-segmentation-faults) – CodeMouse92
找出它:它用\ n讀取一個空字符串,當strtok()返回一個空指針時。 –