通过函数参数返回const char *

时间:2018-08-24 20:07:01

标签: c

尝试为返回类型不是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

假设返回类型必须是其他类型时,尝试“获取”时这是正确的方法吗?如果是这样,缺少什么?如果没有,该如何解决?

1 个答案:

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