gpt4 book ai didi

c++ - 从函数返回本地 var 字符串失败,而本地 var int 和 char 工作正常。为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:22 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Difference between - returning a ‘local’ char* from a function vs returning a ‘local’ int* from a function

这是一个简单的代码,其中在 3 个不同的函数 [ localStrPtr, localIntPtr, localCharPtr] 中返回一个指向它们局部变量的指针 [string, integer, char]各自的功能。

代码:

#include <stdio.h>

char* localStrPtr (char*);
int* localIntPtr (int, int);
char* localCharPtr (char);

main()
{
int *pInt;
char *pChar;

printf( "localStrPtr = %s\n", localStrPtr("abcd") );

pInt = (int*) localIntPtr(3, 5);
printf( "localIntPtr = %d\n", *pInt );

pChar = (char*) localCharPtr('y');
printf( "localCharPtr = %c\n", *pChar );
}

char* localStrPtr(char* argu)
{
char str[20];
// char* str = (char*) malloc (20);

strcpy (str, argu);
return str;
}

int* localIntPtr (int argu1, int argu2)
{
int local;
local = argu1 + argu2;
return (&local);
}

char* localCharPtr (char argu)
{
char local;
local = argu;
return (&local);
}

编译日志:

stringManip.c: In function `localStrPtr':
stringManip.c:27: warning: function returns address of local variable
stringManip.c: In function `localIntPtr':
stringManip.c:34: warning: function returns address of local variable
stringManip.c: In function `localCharPtr':
stringManip.c:41: warning: function returns address of local variable

运行日志:

localStrPtr =
localIntPtr = 8
localCharPtr = y

如您在日志文件中所见,localStrPtr 返回“一些垃圾”,而 localIntPtr 和 localCharPtr 返回“预期”值。

但是,在函数 localStrPtr 中,如果我将 char str[20] -to-> char* str = (char*) malloc (20 ),localStrPtr 正确返回字符串“abcd”。进行上述更改后,这是运行日志。

新运行日志:

localStrPtr = abcd
localIntPtr = 8
localCharPtr = y

问题:

[1] 在函数 localIntPtr 和 localCharPtr 中,返回的局部变量地址的内容有效,但是对于函数 localStrPtr,正确的值返回“仅”使用 malloc,但不会使用本地字符海峡[20]。为什么它不能与 str[20] 一起工作而与局部变量 char 和 int 一起工作?

[2] 为什么我们在 COMPILE LOG 中看到以下所有 3 个函数的行?

  • stringManip.c:27: 警告:函数返回局部变量的地址
  • stringManip.c:34: 警告:函数返回局部变量的地址
  • stringManip.c:41: 警告:函数返回局部变量的地址

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