제목에서 언급했듯이 사용자에게 파일 이름을 제공하도록 요청 gets
하고 str
. 그런 다음 이름을 사용하여 파일에 액세스하려고하면 프로그램이 충돌합니다.
int openFile(FILE *fp){
puts("What's the name of the file (and format) to be accessed?");
char str[64];
gets(str);
fp = fopen((const char *)str, 'r');
...
return 0;
주요 내용 :
FILE *fp; // file pointer
openFile(fp);
내가 입력 한 파일 이름 (data.txt)은 실제로 프로젝트의 나머지 부분과 동일한 디렉토리에 있으므로 문제가되지 않습니다. 파일이 올바르게 열렸는지 테스트 해 보았지만 이름을 지정한 직후 계속 충돌합니다.
그것은해야 fp = fopen(str, "r");
하기 때문에, fopen()
예상하는 mode
A와 char *
오히려 하나 이상의 문자열을 가리키는 char
.
C에서 매개 변수가 있기 때문에 또한, 값에 의해 전달 , 당신의 fp
의지는 이후에 수정되지 openFile()
이라고합니다. 작동 시키려면 다시 작성하고으로 호출해야합니다 openFile(&fp);
. 다음은 그 예입니다.
void openFile(FILE **fp) {
puts("What's the name of the file (and format) to be accessed?");
char str[64];
fgets(str, 64, stdin);
str[strcspn(str, "\n")] = '\0';
*fp = fopen(str, "r");
}
fgets()
버퍼 오버플로 보호를 제공하는 데 사용됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다