한 줄에는 정수로 읽을 임의의 숫자가있는 파일이 있습니다.파일의 한 줄에서 공백으로 구분 된 임의의 수의 문자 읽기
1 2 3 4
그때 fgets
을 사용하려고하고 strtok
이 달성하기 : 최소한의 재현성 예에서, 난 단지 다음 줄이 포함 된 파일 test.dat
만들어
#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;
}
을하지만이 인쇄 결과 1
의 21 라인, 0
의 632 라인이 뒤 따른다. 마지막으로 i
이 20보다 커지고 할당 된 공간이 array
이므로 세그먼트 화 오류가 발생합니다. 내가 이해할 수없는 것은 600+ 라인이 인쇄되는 이유이며, 파일에서 숫자 1
이상을 읽을 수없는 이유입니다. 내가 뭘 놓치고 있니?
참고 : 전체 파일을 읽는 기존 서브 루틴을 간단하게 수정하기 때문에 fgets
으로 파일을 계속 읽는 것이 좋습니다.
흠, 불분명 한 이유는 fgets (라인 300, fileptr)'300;'. 'fgets (line, sizeof line, fileptr);을 기대할 것입니다. – chux
@chux 옳지 않은 이유는 - 그 라인이 어디에서 왔는지 원래 코드를 쓰지 않았기 때문입니다. 내가 고칠거야. 감사. – sodiumnitrate
목표가 "space-separated chars"를 얻는 것이라면,'strtok()'이 좋다. 그러나 그 토큰은'atoi()'를 즉시 실행하기 때문에, [strtok()/atoi() 대신'strtol()'을 사용하면 [공백으로 분리 된 여러 정수의 문자열 해석] (https : /stackoverflow.com/q/28233450/2410359) – chux