기본 C 파일 I/O 프로그램의 포인터 문제
-
21-08-2019 - |
문제
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp = fopen("lr.txt", "r");
fseek(fp, 0L, SEEK_END);
int size = ftell(fp);
fseek(fp, 0L, SEEK_SET);
char *lorem_ipsum;
int i = 0;
lorem_ipsum = (char*) malloc(sizeof(char) * size);
while(fscanf(fp, "%s\n", lorem_ipsum) != EOF)
{
printf("%s", lorem_ipsum[i]);
i++;
}
fclose(fp);
return 0;
}
그러나이 프로그램은 컴파일되고 실행되었지만, 일어난 일은 내가 Segfault를 얻었고이 프로그램에 무엇이 잘못되었는지 정확히 알지 못한다는 것이 었습니다. 누군가 내가 얻은 포인터 오류로 나를 도울 수 있습니까?
해결책
당신은 인쇄하려고합니다 lorem_ipsum[i]
마치 문자열 인 것처럼. lorem_ipsum
문자열입니다 lorem_ipsum[i]
캐릭터 일뿐입니다.
segfault는 printf가 캐릭터의 가치를 봅니다. lorem_ipsum[i]
char* 포인터 (문자열)로 해석합니다. 당연히 문자의 값은 유효하고 할당 된 메모리 주소에 해당하지 않습니다.
다른 팁
당신은 지나가고 있습니다 char
(lorem_ipsum[i]
) 로 fscanf
a char*
논쟁으로.
사용하고 싶을 수도 있습니다 lorem_ipsum
또는 lorem_ipsum+i
당신이 정말로 먼저 제거하고 싶다면 i
캐릭터 꺼짐.
For Loop에서 무엇을하려고하는지 설명 할 수 있습니까?
파일을 라인별로 읽은 다음 줄을 인쇄하려고하는 것 같습니다. 그러나 printf ( "%s", lorem_ipsum [i])를 할 때 문자열이 아닌 문자를 보내는 것입니다.
제휴하지 않습니다 StackOverflow