可能的重复:
局部变量的内存可以在其作用域之外访问吗? https://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope
这是一个简单的代码,其中有 3 个不同的函数[ localStrPtr、localIntPtr、localCharPtr]返回指向其局部变量的指针[字符串、整数、字符]在各自的职能中。
CODE:
#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
RUN LOG:
localStrPtr =
localIntPtr = 8
localCharPtr = y
正如您在日志文件中看到的,localStrPtr 返回“一些垃圾”,而 localIntPtr 和 localCharPtr 返回“预期”值。
但是,在函数中本地StrPtr,如果我改变[“字符str[20]“-到->”char* str = (char*) malloc (20)" ], localStrPtr 正确返回字符串“abcd”。这是进行上述更改后的运行日志。
新的运行日志:
localStrPtr = abcd
localIntPtr = 8
localCharPtr = y
问题:
在函数 localIntPtr 和 localCharPtr 中,返回的局部变量地址内容为 WORKED,但对于函数 localStrPtr,返回正确的值"only"可以使用 malloc,但不能使用本地 char str[20]。为什么它不能与 str[20] 一起使用?
-
为什么我们在编译日志中看到所有 3 个函数的以下行?
- stringManip.c:27:警告:函数返回局部变量的地址
- stringManip.c:34:警告:函数返回局部变量的地址
- stringManip.c:41:警告:函数返回局部变量的地址