#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;
}
这个程序编译并运行,然而,发生的事情是我遇到了段错误,我不知道这个程序究竟出了什么问题。有人可以帮我解决我得到的指针错误吗?
答案 0 :(得分:6)
您正在尝试打印lorem_ipsum[i]
,就好像它是一个字符串一样。 lorem_ipsum
是一个字符串,因此lorem_ipsum[i]
只是一个字符。
发生segfault是因为printf查看lorem_ipsum[i]
处字符的值并将其解释为char *指针(字符串)。当然,字符的值与有效的已分配内存地址不对应。
答案 1 :(得分:3)
您正在将char
(lorem_ipsum[i]
)传递给fscanf
函数,该函数需要char*
作为参数。
如果您真的想要删除第一个lorem_ipsum
字符,则可能需要使用lorem_ipsum+i
或i
。
答案 2 :(得分:0)
你能解释一下你在for循环中想要做什么吗?
在我看来,您正在尝试逐行读取文件,然后打印该行。 但是,当您执行printf(“%s”,lorem_ipsum [i])时,您将发送一个字符,而不是字符串。