파일이 있습니다. 각 행을 읽고 토큰을 탭으로 배열에 저장하려고합니다. 그러나 토큰 [0] .. token [4]는 strtok()의 결과 인 각 char의 주소를 가리키고 있습니다. 그래서 token [0] ... token [4]는 파일의 다음 줄에서 strtok을 호출 할 때마다 바뀝니다. 이 문제를 어떻게 해결합니까? char* tokens[MAX_SIZE]
대신 char tokens[MAX_SIZE]
을 시도하면 strtok가 char *을 반환하기 때문에 변환 오류가 발생합니다.C 토큰 화 및 배열로 저장
파일은
20 34 90 10 77
80 12 37 29 63
45 21 55 18 46
내 코드입니다 :
이FILE *f;
if ((f = fopen("myinput.txt","r")) == NULL) {
perror("Failed to open file:");
return -1;
}
char * line;
size_t len = 0;
char *tokens[MAX_SIZE];
int i = 0;
while (getline(&line, &len, f) !=-1) {
char* lineWithoutNullByte = strtok(line,"\n");
tokens[i]=strtok(lineWithoutNullByte,"\t");
i++;
int x = 1;
while (x){
tokens[i] = strtok(NULL, "\t");
if (tokens[i] == NULL){
x=0;
}else{
i++;
}
}
printf("test: %s %s %s %s %s\n", tokens[0],tokens[1],tokens[2],tokens[3],tokens[4]);
}
예상 출력
test: 20 34 90 10 77
test: 20 34 90 10 77
test: 20 34 90 10 77
입니다하지만 점점 오전 :
test: 20 34 90 10 77
test: 80 12 37 29 63
test: 45 21 55 18 46
는 명확히하기 : 이 의미, 내가 전체 tokens
배열을 인쇄하는 경우 당신은 당신이 제대로 strtok
에서 얻을 토큰을 사용하지 않는
45 21 55 18 46
45 21 55 18 46
45 21 55 18 46
왜 첫 번째 줄이 세 번 반복 되길 기대합니까? 파일과 일치하는 내용이 있습니까? – dasblinkenlight
두 번째 마지막 줄에 토큰 0 ~ 4 만 인쇄하고 있습니다. 문제가 무엇인지 알아 내려고했습니다. – Jean
전체 토큰 배열을 인쇄하면 읽습니다. 45 21 55 18 46 45 21 55 18 46 45 21 55 18 46 – Jean