返回全局字符串变量的地址

时间:2017-05-11 14:15:33

标签: c pointers memory-address

如何返回全局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;
}

3 个答案:

答案 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)

牢记以下要求 -

  1. 您想要返回一个字符**,其中一个引用一次为您提供字符串&#34;获取我的地址&#34;
  2. 您希望字符串是可变的。
  3. 所以你可以做到

    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;
}