gpt4 book ai didi

c - 为什么在 C 中返回给定错误的语句?

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

What is the difference between char s[] and char *s?

我已经给出了基于给定链接的两个代码示例。假设 getstring() 是一个函数。


 char *str = "GfG"; /* "GfG" is stored in read only part of shared segment */
/* str has auto storage duration,so stored on the stack
/* No problem: remains at address str after getString() returns*/
return str;

char str[] = "GfG"; /* "GfG" is stored in read only part of shared segment */ 
/* str has auto storage duration,so stored on the stack.
/* Problem: string may not be present after getSting() returns */
return str;

因为两者都有自动存储持续时间,并且两个变量都存储在堆栈段中。

那么,为什么 return str第一个有效而不对第二个有效?

最佳答案

str 的两个版本都有自动存储期限。但它们的类型不同,这就完全不同了。

char *str - 是一个指针。它指向一个字符串文字。文字的存储持续时间是静态的。返回str,会返回字面量的地址(返回str的内容),一切顺利。

char str[] - 是一个本地数组。它是从文字中初始化的。但是整个缓冲区的持续时间是自动的。当您返回它时,它会衰减为一个指针(返回 str 的地址)。缓冲区超出范围,因此该地址导致悬空指针。

关于c - 为什么在 C 中返回给定错误的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696253/

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