尝试为返回类型不是const char *
(即通过参数返回)的char char *
类型创建吸气剂。但是,当从get_MyName()
返回时,ptr_name
仍为NULL
。
typedef enum {FIRST_NAME, SECOND_NAME, MAX_NAMES} NAME_CHOICES;
const char *MyNames[MAX_NAMES] = {
"Jon",
"Steve",
};
size_t get_MyName(const char *my_name, NAME_CHOICES my_choice) {
my_name = MyNames[my_choice];
return sizeof(MyNames[my_choice]);
}
int main() {
const char *ptr_name = NULL;
get_MyName(ptr_name, FIRST_NAME);
printf("%s\n", ptr_name);
}
在运行期间,ptr_name
作为get_MyName()
传递到my_name
,并且my_name
被设置为适当的指针。但是,从函数返回后,“ ptr_name”仍为NULL
。
1. ptr_name == NULL
2. pass ptr to get_MyName()
3. ptr set to 0 index of char ptr array (ptr to 'J' in 'Jon')
4. size returned (char ptr => 1 byte)
5. ptr_name printed as null
假设返回类型必须是其他类型时,尝试“获取”时这是正确的方法吗?如果是这样,缺少什么?如果没有,该如何解决?
答案 0 :(得分:4)
传递指针的地址。下面的代码应该可以工作
#include <stdio.h>
typedef enum {FIRST_NAME, SECOND_NAME, MAX_NAMES} NAME_CHOICES;
const char *MyNames[MAX_NAMES] = {
"Jon",
"Steve",
};
size_t get_MyName(const char **my_name, NAME_CHOICES my_choice) {
*my_name = MyNames[my_choice];
return sizeof(MyNames[my_choice]);
}
int main() {
const char *ptr_name = NULL;
get_MyName(&ptr_name, FIRST_NAME);
printf("%s\n", ptr_name);
}