gpt4 book ai didi

c - open_memstream 警告 "pointer from integer without a cast"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:04 26 4
gpt4 key购买 nike

我正在使用 open_memstream 为嵌入式 linux 系统编写一些 C 代码,但我不明白为什么会收到编译警告:assignment makes pointer from integer without a cast

为了简单起见,我没有粘贴我所有的代码,而是用 here 中的小示例重现了问题。 :

#include <stdio.h>
#include <stdlib.h>

int
main (void)
{
FILE *stream;
char *buf;
size_t len;
off_t eob;

stream = open_memstream (&buf, &len);
if (stream == NULL)
/* handle error */ ;
fprintf (stream, "hello my world");
fflush (stream);
printf ("buf=%s, len=%zu\n", buf, len);
eob = ftello(stream);
fseeko (stream, 0, SEEK_SET);
fprintf (stream, "good-bye");
fseeko (stream, eob, SEEK_SET);
fclose (stream);
printf ("buf=%s, len=%zu\n", buf, len);
free (buf);
return 0;
}

代码有效,但编译器提示行 stream = open_memstream (&buf, &len);

它指的是什么整数?我们按照函数原型(prototype)的要求传入一个指向 size_t 的指针。

FILE *open_memstream(char **bufp, size_t *sizep);

这段代码有问题吗,还是我需要看看我的编译器?我想以正确的方式摆脱这个警告。


更新:

使用 gcc 4.3.2、glibc 2.9


更新 2:

尝试了以下方法:

powerpc-860-linux-gnu-gcc -std=c99 -Wall -D_XOPEN_SOURCE=700 -c source.c

结果:

source.c: In function 'main':
source.c:12: warning: implicit declaration of function 'open_memstream'
source.c:12: warning: assignment makes pointer from integer without a cast

根据 this ,看来 _XOPEN_SOURCE=700 可用自 glibc 2.10

由于我使用的是 glibc 2.9,我还有哪些其他选择(除了升级 glibc)?


更新 3:

添加以下内容消除了警告:

extern FILE *open_memstream(char **bufp, size_t *sizep);

这个方案有什么问题吗?


更新 4:

这代替了外部:

powerpc-860-linux-gnu-gcc -std=c99 -Wall -D_GNU_SOURCE -c ops_cmds.c

所以根据manpage ,需要使用 _GNU_SOURCE 如果 glibc pre-2.10(在我的例子中)和 _XOPEN_SOURCE=700 如果 2.10+

最佳答案

定义:

#define _POSIX_C_SOURCE 200809L

#define _XOPEN_SOURCE 700

在包含 stdio.h 之前的源代码中。或者使用 gcc,您可以使用 -D 选项定义宏值并将其传递给源文件:

gcc -std=c99 -Wall -D_XOPEN_SOURCE=700 -c source.c 

open_memstream 是一个 POSIX 函数,如果没有这个定义,它的声明在您的程序中是不可见的。

关于c - open_memstream 警告 "pointer from integer without a cast",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14862513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com