0
fgets()
및 sscanf()
을 사용하여 입력 파일을 읽고 구문 분석하려고합니다.형식이 지정된 파일을 스캔 할 때 sscanf 오류가 발생했습니다.
void reading_file(char* file)
{
FILE *f = fopen(file, "r");
char line[256];
while(fgets(line, sizeof(line), f))
{
int i = 0;
char str[20];
sscanf(line, "%d %s", &i, str);
printf("%d %s\n", i, str);
}
}
입력 파일은 다음과 같습니다 : 여기 (단지 관련 부분이 여기에 나열됩니다) 내 기능입니다
0 be68c5bc1ee7be6f20728579ee082aed6214825b
1 e2d6c1bb794ff4545ef2f101ca904dbbb3ed3923
이 코드 조각의 출력은 다음과 같습니다 완전히
875849270 aa71dbd21bd2b05f3bd261256f443fd5f9f7272e
1633890352 465c63da3d0168553c1027eb00ca364c337ced44
잘못된.
재미있는 부분은 여기에 있습니다. 구조체를 사용하여 입력 라인을 유지하면 출력이 정확합니다! 수정 후의 코드는 다음과 같습니다.
typedef struct s_s{
int id;
char hash[20];
} s_t;
void reading_file(char* file)
{
FILE *f = fopen(file, "r");
char line[256];
while(fgets(line, sizeof(line), f))
{
s_t s;
sscanf(line, "%d %s", &s.id, s.hash);
printf("%d %s\n", s.id, s.hash);
}
}
출력은 입력 파일과 동일합니다. 왜 그런가요? 누구든지 설명이 있습니까?
길이가 긴 문자열을 읽고 싶을 때 왜'char str [20];'입니까? –
정의되지 않은 동작을 유발하는 코드의 동작을 이해하려고 시도하는 것은 의미가 없습니다. –
문제가 해결되어 다행입니다. 아래에 게시 된 답변 중 어떤 것이 문제를 해결하는 데 도움이되었다고 생각되면 답변 옆에있는 화살표를 클릭하여 문제를 수락하는 것이 좋습니다. 일단 당신이 대답을 수락하면, 응답자와 당신은 약간의 명성을 얻습니다. 충분한 명성으로 당신을 도운 대답에 투표 할 수 있습니다. 또한 다른 독자들에게 유용하게 사용할 수 있도록 답변 플롯을 허용했습니다. –