gpt4 book ai didi

c - 函数返回局部变量的地址 [-Wreturn-local-addr]

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

我正在开发一个简单的程序,它将获取给定变量的内存地址,最多 64 位(unsigned long)。目前这是我的代码,但出于某种原因,编译器向我发出警告,说我的方法正在返回局部变量的地址,而这正是我想要的。

int main(int argc, char *argv[])
{
char* one = argv[1];
long memaddress = address(one);
}

uint64_t address( char * strin)
{
return (uint64_t) &strin;
}

我将如何减轻此警告以及可能导致此警告出现的原因?

最佳答案

你可以想象函数定义和它的调用

long address = address(one);
//...
uint64_t address( char * strin)
{
return (uint64_t) &strin;
}

以下方式

long address = address(one);
//...
uint64_t address( void )
{
char * strin = one;
return (uint64_t) &strin;
}

如您所见,变量 strin 是函数的局部变量。退出函数后会被销毁。因此退出该函数后其地址将无效。编译器会就此警告您。

要避免警告,您至少可以按以下方式编写函数

uint64_t address( char ** strin)
{
return (uint64_t) &*strin;
}

并称它为

long address = address(&one);

关于c - 函数返回局部变量的地址 [-Wreturn-local-addr],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613359/

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