의 마지막 단어 뒤에 내가는 fgets를 사용하여 파일에서 다음 라인을 읽고있다 동안 종료 :루프 즉시 라인
#C one two three four five six seven eight nine ten eleven
(#C 제외) 각 단어는 열 제목이다. 따라서 내 파일에는 열이 11 개 있습니다.
제 목표는이 줄을 각 단어의 토큰으로 나누는 것입니다. 또한, 나는 열 머리글이 11 개 있다고 계산할 필요가있다. (열 머리글은 11보다 많거나 적을 수 있습니다.)
제 문제는이 줄 끝의 공백입니다. 여기 내가 사용하고있는 코드입니다.
while(1){
fgets(buffer,1024,filename);
if (buffer[1] == 'C'){
char* str = buffer+2;
char* pch;
pch = strtok(str," ");
while(pch != NULL){
pch = strtok (NULL, " ");
if (pch == NULL)break; //without this, ncol contains +1 the
//amount of columns.
ncol++;
}
break;
}
}
이 코드에는 NcoI = 11 나에게주고 잘 작동 그러나
(선 내가 읽고있다 끝에 하나의 공간이 있습니다) , 줄 끝 부분에 공간이 없다면 ncol = 10을주고 마지막 열을 읽지 않습니다.
내 목적은 끝 부분에 공백이 있는지 여부에 관계없이 ncol = 11을 얻는 것입니다. 나는 그저 마지막 단어를 읽고 더 많은 단어가 있는지 확인하고 그렇지 않다면 종료한다.
NULL과 \ 0의 차이점은 무엇입니까? @Philip – detraveller
@detraveller : 'NULL'은 포인터 값이고, '\ 0'은 문자입니다. 사실 컴파일러는 양쪽 모두에서 int를 '0'으로 만든다. 그래서 그것은 단지 설명을위한 것이다. '* pch == '\ 0''은 문자열의 길이가 0인지를 확인하는 가장 빠른 방법입니다. – Philip