Return 一个全局字符串变量的地址

Return the address of a global string variable

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

C doesn't have string so I assume string* will become char**

可能不会。 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. 您想 return 一个字符**,其中一个引用一次给您字符串 "Get my address"
  2. 您希望字符串可变。

所以你可以做到

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

它可能会帮助您 typedef 定义 string。那么很容易看出 string 变量 s 的地址只是 &s 对于任何其他地址。我希望 string 在整个项目中被大量使用,并且 typedef 还将避免您尝试将每个 string 更改为 字符*.

要打印地址,请使用格式标志 %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;
}