【问题标题】:C - Memory Access Violation (But Why?)C - 内存访问冲突(但为什么?)
【发布时间】: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] 无效?

【问题讨论】:

  • bufFILE_SIZE 指针char 的数组。这些指针都没有被初始化为指向某个东西。我怀疑你真的想要char buf[FILE_SIZE];,不带星号。
  • putc 是打印单个字符的更好方法。你可以写putc(buf[i], stdout)。您也可以通过调用printf("%s", buf)puts(buf) 来编写整个字符串而不循环,只要您以空值终止bufputs 默认会添加一个换行符,但您必须为 printf 指定一个换行符。

标签: c pointers memory-management


【解决方案1】:

哎呀buf 不应该是指向字符的指针数组,而是字符数组

char buf[FILE_SIZE];

printf("%c", buf[i]);

没有崩溃

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2014-11-23
    • 2019-12-29
    相关资源
    最近更新 更多