0

我有以下代码来打开内存中的缓冲区并向其中写入一些数据:

int main() {
    char buf[1000] = {0};
    FILE * os = fmemopen(buf, 1000, "w");
    fprintf(os, "%d", 100);
    fclose(os);

    printf("%d\n", buf);

    return 0;
}

输出是一些随机数,例如:895734416或负数......为什么会这样?

4

3 回答 3

3

printf("%d\n", buf);输出地址buf而不是返回值。

于 2013-08-28T04:47:07.927 回答
3
printf("%d\n", buf);

这将打印地址buf作为其指针变量。

如果您真的想打印其地址,请使用%p而不是%d.

如果要打印字符串 use %s,但要确保从文件中读取的缓冲区为空终止。

于 2013-08-28T04:48:50.890 回答
1

在内存中,所有数据都存储在 1 和 0 中。如何解释数据取决于您。

If you want the data to be printed as integer, use %d.
If you are printing a address , use %p.
If you want the data to be printed as char, use %c.
If you want the data to be printed as string, use %s.

在您的示例中,使用

printf("%d\n", buf);

以获得正确的输出。

于 2013-08-28T04:54:39.577 回答