나는 텍스트 파일이 있습니다. 그래서 스트림() C. scanf로의 입력/출력에 사용되는 기본 입력 스트림 (표준 입력)를 사용하고있다 일명
#include <stdio.h>
int main()
{
char string1[11];
char string2[11];
char string3[11];
char string4[11];
char string5[11];
char string6[11];
char string7[11];
char string8[11];
char string9[11];
FILE * fileReader = fopen("text.txt", "r");
if(fileReader)
{
fscanf(fileReader, "%10s %10s %10s %10s %10s %10s %10s %10s %10s", string1, string2, string3, string4, string5, string6, string7, string8, string9);
printf("Found: %s %s %s %s %s %s %s %s %s\n", string1, string2, string3, string4, string5, string6, string7, string8, string9);
fclose(fileReader);
}
else
{
puts("Error opening filestream!");
}
return 0;
}
FILE *를, 파일을 읽기 위해 사용될 수 없다. fscanf()를 사용하면 파일 스트림을 매개 변수로 지정할 수 있습니다.
또한 % 10s를 사용하면 fscanf()가 각 문자열에 대해 10자를 초과하여 읽지 않습니다. % 10s가 없으면 scanf()로 인해 프로그램의 버퍼 오버플로가 발생할 수 있습니다. 이것은 기본적으로 char [] 변수가 보유 할 수있는 것보다 많은 데이터를 읽는 경우 프로그램 메모리를 손상시킵니다.
(fileReader)가 fileReader가 성공적으로 열렸는지 확인합니다 (0이 아닌 값 = true, 0 (일명 NULL) = false). 나는 마치 (fileReader! = NULL)처럼 할 수 있었지만 같은 효과가 있었다.
또한 배열을 처리 할 때는 & 연산자를 사용하지 마십시오. 배열은 scanf()와 같은 함수에 전달 될 때 포인터가 열화되므로 &을 사용하면 포인터의 주소를 scanf()로 전달합니다. 이는 원하는 포인터가 아닙니다.
[email protected]:~$ gcc stringReader.c -o string && ./string
Found: ho hello blah hi dsdf hihi hiho hih bleh
출처
2015-01-08 01:44:53
Sky
그냥 str1과, str2'와'str4' '의 정의를 게시 :
이
내가 위의 코드 ("text.txt"로 저장되어 사용되는 텍스트 파일)를 컴파일 할 때 내가 무엇을 얻을 . –및 "이상한"명확히, 어쩌면 하나 이상의 예제를 보여주십시오. – fvu
내가 당신을 모욕했다면, 당신이 제공 한 가난한 세부 사항 때문일 것입니다. 'str1'이란 무엇입니까? 그리고 지구에서 "이상한 태도"가 의미하는 것은 무엇입니까? 프로그래머가 문제를 해결하는 데 도움이되는 충분한 정보 나 정보를 제공하지 않았습니다. –