如何返回全局char *变量的地址?我必须为一个项目做这个。我必须编写基于伪代码的函数,如下所示:
string* get_variable_address();
C没有字符串,所以我认为string*
将成为char**
。我尝试了很多东西,但我无法让它发挥作用。我看起来像这样:
#include <stdio.h>
char test[100] = "Get my address";
int main(void) {
char** address = return_variable_address();
printf("The address is: %s\n", *address);
return 0;
}
char** return_variable_address() {
return &test;
}
答案 0 :(得分:3)
C没有字符串所以我假设字符串*将成为字符**
可能不是。 C中的字符串是一个字符数组,您可以通过char*
访问它。因此,您可以简化程序以获得所需的结果:
#include <stdio.h>
char* return_variable_address (void);
char test[100] = "Get my address";
int main(void) {
char* address = return_variable_address();
printf("The content stored at the address: %s\n", address);
return 0;
}
char* return_variable_address (void) {
return test;
}
请注意,所有这些都是不好的做法 - 避免全局变量。
答案 1 :(得分:1)
牢记以下要求 -
所以你可以做到
char test[100] = "Get my address";
char *pointer = test;
char** return_variable_address(void) {
return &pointer;
}
int main(void) {
char** address = return_variable_address();
printf("The address is: %s\n", *address);
(*address)[0] = 'F'; //Test for mutability
printf("The address is: %s\n", *address);
return 0;
}
据我所知,这些要求适用于某些安全测试,因此非常特殊。
在这里演示:Ideone
答案 2 :(得分:1)
它可能会帮助您 typedef 字符串的定义。然后很容易看出字符串变量 s 的地址与其他任何地址一样&amp; s 。我希望在项目中大量使用字符串,而typedef也可以帮助您避免尝试将每个字符串更改为字符串。< / p>
要打印地址,请使用格式标志%p 。
#include <stdio.h>
typedef char string[10]; // string defined as an arrary of 10 chars
string s = "Hello world"; // I've deliberately put a common error in here
string* return_variable_address( void )
{
return &s;
}
int main( void )
{
printf("Address of global var s = %p \n", return_variable_address() );
return 0;
}