C – 返回没有malloc的char指针

C – 返回没有malloc的char指针,第1张

概述请考虑以下代码: char* pointerTesting(void) { char* test = "hello"; return test;}int main() { char* string = pointerTesting(); printf("string: %s\n", string);} 编译和运行没有问题.但是,根据我的理解,这应该不起作用, 请考虑以下代码:
char* pointerTesting(voID) {    char* test = "hello";    return test;}int main() {   char* string = pointerTesting();   printf("string: %s\n",string);}

编译和运行没有问题.但是,根据我的理解,这应该不起作用,因为分配给测试指针的内存在堆栈上,并且在返回main时它被销毁.

所以问题是,如果在pointerTesting()函数中没有malloc,它如何工作?

解决方法 在这种情况下,字符串“hello”存储在全局存储器*中.所以它已经分配了.

因此,从函数返回时它仍然有效.

但是,如果你这样做:

char test[] = "hello";return test;

然后不,它不会工作. (未定义的行为)在这种情况下,字符串实际上是一个本地数组 – 当函数返回时它不再存在.

*虽然通常就是这种情况,但标准并没有说它必须存储在全局内存中.但重要的是,字符串文字的生命周期是整个程序的持续时间. (看评论)

总结

以上是内存溢出为你收集整理的C – 返回没有malloc的char指针全部内容,希望文章能够帮你解决C – 返回没有malloc的char指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1238048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存