2017-03-31 123 views
0

,所以我想從一個文本文件中讀取並把它放在一個變量從文件讀取一個配置

在文本文件中有

NAME= Bame 
GAME= Fame 

我聽說strsep /的strtok的但我仍然有問題,以及與此代碼我得到分割故障11

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 

int main() { 
char *token; 
char *string; 
char *tofree; 
FILE *fp; 
const char *file = "/tmp/test.txt"; 
fp = fopen(file, "r"); 
while(!feof(fp)) { 
fgets(string, sizeof(string), fp); 
token = strsep(&string, ","); 
printf("%s", string); 
} 
fclose(fp); 
exit(0);  
} 
+3

'char * string;'是_不是一個字符串。它是一個指向「char」的指針,指向「無處」,因爲它沒有被初始化。你寫入這個未初始化的指針,從而調用UB。因此,崩潰。通過使用字符數組修復:'char string [100];'。另請參閱[爲什麼「while(!feof(file))」總是錯誤?](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong)。所以,用你的'fgets'替換你的'feof'。 –

+1

'fp = fopen(file,「r」); if(fp == NULL){perror(Error opening file:「); return 1;}' – LPs

+0

另請參見[爲什麼while(!feof(file))總是出錯?](http://stackoverflow.com/questions/5431941 /爲什麼 - 是 - 同時-FEOF文件 - 總是錯的) –

回答

1

的主要問題是從這一行:

fgets(string, sizeof(string), fp); 

第二個參數應該是'Maximum number of characters to be copied into str'。在調用此函數之前,您應該已初始化了string。如果您看看我給出的鏈接中的示例,將string更改爲字符數組將有助於您進一步前進。

char string[100]; 
.... 
fgets(string, 100, fp);  

以前,你正經過sizeof(string),然而由於串實際上是一個指針類型,你在字節指針傳遞的大小(4或8取決於平臺)。 string也是一個未分配的指針,所以fgets可能會寫入隨機存儲器地址。