我在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 将返回一个整数。