【发布时间】:2021-06-15 05:09:45
【问题描述】:
我做了一个小程序,它应该读取一个文件并将其内容打印出来(是的,它 正好是 14 个字节 :)
# include <stdio.h>
# define FILE_SIZE 14
int main ()
{
FILE *fp = fopen("file.txt", "r");
char *buf[FILE_SIZE];
fread(buf, FILE_SIZE, 1, fp);
for (int i = 0; i < FILE_SIZE; i++) printf("%c", *buf[i]);
}
如果我运行它,就会出现Memory Access Violation。
我猜这是由*buf[i] 引起的,因为如果我删除*,一切正常。
(好吧,我会得到一些神秘的字符,但这没关系,不是吗?)
现在,我的问题是:为什么 buf[i] 有效,而 *buf[i] 无效?
【问题讨论】:
-
buf是FILE_SIZE指针 到char的数组。这些指针都没有被初始化为指向某个东西。我怀疑你真的想要char buf[FILE_SIZE];,不带星号。 -
putc是打印单个字符的更好方法。你可以写putc(buf[i], stdout)。您也可以通过调用printf("%s", buf)或puts(buf)来编写整个字符串而不循环,只要您以空值终止buf。puts默认会添加一个换行符,但您必须为printf指定一个换行符。
标签: c pointers memory-management