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

时间:2009-03-20 01:43:52

标签: 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;
}

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

3 个答案:

答案 0 :(得分:6)

您正在尝试打印lorem_ipsum[i],就好像它是一个字符串一样。 lorem_ipsum是一个字符串,因此lorem_ipsum[i]只是一个字符。

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

答案 1 :(得分:3)

您正在将charlorem_ipsum[i])传递给fscanf函数,该函数需要char*作为参数。

如果您真的想要删除第一个lorem_ipsum字符,则可能需要使用lorem_ipsum+ii

答案 2 :(得分:0)

你能解释一下你在for循环中想要做什么吗?

在我看来,您正在尝试逐行读取文件,然后打印该行。 但是,当您执行printf(“%s”,lorem_ipsum [i])时,您将发送一个字符,而不是字符串。