C 프로그래밍 언어를 사용하고 있고 이진 파일의 모든 줄의 첫 번째 문자열을 읽으려고합니다. 바이너리 파일의 데이터C에서 이진 파일에서 읽는 데 실패했습니다
예는
Iliya Iliya Vaitzman을 (난 당신을 보여주기 위해 TXT 파일에 기록했다) 16.00 이스라엘 1 0 1
I가 읽고 싶어 줄의 첫 번째 Iliya (또는 줄의 첫 번째 단어가 될 것입니다).
나는 다음과 같은 코드를 시도하고 있지만, 내가 그에게
다음 코드 준 문자열 변수에 NULL 반환 계속 : 나는 부울 변수에 타입 정의와 #DEFINE를 사용
FILE* ptrMyFile;
char usernameRecieved[31];
boolean isExist = FALSE;
ptrMyFile = fopen(USERS_CRED_FILENAME, "a+b");
if (ptrMyFile)
{
while (!feof(ptrMyFile) && !isExist)
{
fread(usernameRecieved, 1, 1, ptrMyFile);
if (!strcmp(userName, usernameRecieved))
{
isExist = TRUE;
}
}
}
else
{
printf("An error has encountered, Please try again\n");
}
return isExist;
(0입니다 거짓, 그 외 모든 것은 참 (TRUE는 참, 거짓은 FALSE)
usernameRecieved는 fread에서 NULL을 계속 유지합니다.
이 문제를 해결하려면 어떻게해야합니까? 대신이의
fread()에서 1 바이트 만 읽는 중입니다. –
바이너리 파일의 형식이 맞지 않습니까? '\ 0'이 종료되고 정확한 위치와 길이를 알지 않는 한,'freed()'로 바이너리 파일에서 C 문자열을 읽을 수 없습니다. 'userName'이 정의되지 않았습니다. –
파일 읽기 논리가 잘못되었습니다. 'feof()'함수는 당신이 file_의 끝을 지나서 읽으려고 시도했을 때만 0이 아닌 값을 반환한다. 즉, 파일의 마지막 레코드를 성공적으로 읽은 후'feof()'는 false를 반환하고 다른 fread()를 수행하고 그 결과를 계속 사용함을 의미합니다. 'fread()'의 반환 값은 읽은 객체의 수이기 때문에 올바른 절차는'fread()'의 반환 값을 항상 테스트하는 것입니다. 만약 값이 0이거나 틀린다면 _then_ 당신은'feof()'를 체크하고 루프를 빠져 나가야 할지를 결정한다. ('ferror()'도 참조하십시오.) –