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;
}
请注意,所有这些都是不好的做法 - 避免使用全局变量。
牢记以下要求 -
- 您想 return 一个字符**,其中一个引用一次给您字符串 "Get my address"
- 您希望字符串可变。
所以你可以做到
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;
}
如何 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;
}
请注意,所有这些都是不好的做法 - 避免使用全局变量。
牢记以下要求 -
- 您想 return 一个字符**,其中一个引用一次给您字符串 "Get my address"
- 您希望字符串可变。
所以你可以做到
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;
}