我有一個文件,它在一行中有任意數量的數字可以讀取爲整數。在一個最小的,可重複的例子,我創建了一個只包含以下行文件test.dat
:從文件中的一行中讀取任意數量的空格分隔的字符
1 2 3 4
然後我嘗試使用fgets
和strtok
來實現這一目標:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
FILE* fileptr;
fileptr = fopen("test.dat","r");
char line[500];
char *token;
int array[20];
int i = 0;
fgets(line,300,fileptr);
token = strtok(line," ");
array[i] = atoi(token);
printf("%d\n", array[i]);
i++;
while(token != NULL){
token = strtok(line," ");
array[i] = atoi(token);
printf("%d\n", array[i]);
i++;
}
return 0;
}
但這會導致印刷21行1
's,接着是0
的632行。最後它給出了分段錯誤,因爲i
增長大於20,分配的空間爲array
。我不明白的是爲什麼會打印600多行文件,以及爲什麼我永遠無法讀取文件中的數字1
以外的內容。我錯過了什麼?
注意:我更願意繼續閱讀文件fgets
,因爲這將是對讀取整個文件的現有子程序的簡單修改。
嗯,不清楚爲什麼在'與fgets(線,300,fileptr)300;'。我期望'fgets(line,sizeof line,fileptr);' – chux
@chux沒有很好的理由 - 我沒有寫出原來的代碼來自哪一行。我會解決它。謝謝。 – sodiumnitrate
如果目標是獲得「空格分隔的字符」,那麼'strtok()'很好。然而,由於該令牌立即運行atoi(),因此使用'strtol()'而不是'strtok()/ atoi()'更有意義,因爲[解析多個空格分隔的整數的字符串](https:/ /stackoverflow.com/q/28233450/2410359) – chux