我正在设置指向局部变量的全局指针的值,如下所示。全局指针的值在函数范围内是正确的,但一旦从函数返回执行,则返回NULL。
In file included from D:/newnativetest/app/src/main/cpp/Eigen/src/Core/Matrix.h:14:
In file included from D:/newnativetest/app/src/main/cpp/Eigen/src/Core/../../Eigen:1:
根据我的理解,addr指针的值应与返回的指针(date_text)或文本相同。但是,返回后返回NULL。我在哪里弄错了 我在机器上看到以下输出
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
char *addr = NULL;
char* date(){
time_t now;
time(&now);
char* text = asctime(localtime(&now));
text[strlen(text) - 1] = '\0';
printf("addr -%p :%s\n", addr, addr);
char* addr = text;
printf("addr -%p :%s\n", addr, addr);
return text;
}
int main(){
char* date_text = date();
printf("text -%p :%s\n", date_text, date_text);
printf("addr -%p :%s\n", addr, addr);
return 0;
}
答案 0 :(得分:2)
该行:
char* addr = text;
addr
中的是全局变量局部变量 shadowing 。因此,不,您不会更改全局变量。将行替换为
addr = text;
用于更改全局变量。
答案 1 :(得分:1)
您要在此处重新命名*addr
的 local 版本:
printf("addr -%p :%s\n", addr, addr);
char* addr = text; // <--
printf("addr -%p :%s\n", addr, addr);
此shadows全局版本。删除char*
,您将收到所需的行为。