gpt4 book ai didi

c - 为什么这会返回 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 00:51:17 25 4
gpt4 key购买 nike

我在 c 中有类似以下源代码的东西:

char *get_str() {
char *str;
int slen=get_strlen();
str=(char *)malloc(sizeof(char)*slen);
set_str(str);
printf("returning str %s with len %d\n", str, strlen(str));
return str;
}

int main() {
char *str=get_str();
printf("recieved str %s with len %d\n", str, strlen(str));
}

我得到以下输出:

returning str hi with len 2
received str with len 0

这让我抓狂。 “returning str”语句具有它应有的功能,但“received str”一直返回 null。我已经验证 slen 是非零的。设置字符串的函数是一个大型且广泛使用的软件包的一部分,因此可以假定正确设置了字符串。

编辑:

如下所述,此处提供的信息不足以解决问题。我还需要指出函数 get_str 在不同的源代码文件中。问题最终是我忘记在标题中为 get_str() 添加一行,alk 和 Nitzan Shaked 在下面正确地猜到了这一点。这并没有导致编译错误,因为我使用的是 ansi c 编译器,它假设 get_str 会返回一个整数。

最佳答案

我敢打赌它在 64 位系统上运行并且您的代码如下所示:

int main() {
char *str=get_str();
printf("received str %s with len %d\n", str, strlen(str));
}

char *get_str() {
char *str;
int slen=get_strlen();
str=(char *)malloc(sizeof(char)*slen);
set_str(str);
printf("returning str %s with len %d\n", str, strlen(str));
return str;
}

要解决此问题,请添加适当的原型(prototype):

char *get_str();

函数首次使用之前。


在(大多数?)32 位系统上,指针是 32 位宽的,这与 int 的大小相同,编译器将函数默认为缺少原型(prototype),因此尽管使用了错误的类型值成功传回。后者在 64 位系统上不再工作,因为指针(在大多数系统上)比 int 更宽。

关于c - 为什么这会返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18110491/

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