指针与基本C文件I/O程序有关

use*_*285 2 c pointers segmentation-fault

#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;
}
Run Code Online (Sandbox Code Playgroud)

这个程序编译并运行,然而,发生的事情是我遇到了一个段错误,我不知道这个程序究竟出了什么问题.有人可以帮我解决我得到的指针错误吗?

Tyl*_*nry 6

您正在尝试打印lorem_ipsum[i],就好像它是一个字符串.lorem_ipsum是一个字符串,所以lorem_ipsum[i]只是一个字符.

发生segfault是因为printf查看字符的值并将其lorem_ipsum[i]解释为char*指针(字符串).当然,字符的值不对应于有效的分配的内存地址.