从函数返回char / string

我在C中编码相当新,目前我正在尝试创建一个返回ac string / char数组并分配给变量的函数。

到目前为止,我已经观察到返回char *是最常见的解决方案。 所以我试过:

char* createStr() { char char1= 'm'; char char2= 'y'; char str[3]; str[0] = char1; str[1] = char2; str[2] = '\0'; char* cp = str; return cp; } 

我的问题是如何使用这个返回的char*并将它指向的char数组赋值给char []变量?

我尝试过(都导致了noob-drowning错误):

  1. char* charP = createStr();
  2. char myStr[3] = &createStr();
  3. char* charP = *createStr();

请注意,您没有动态分配变量,这几乎意味着函数str内的数据将丢失。

你应该有:

 char * createStr() { char char1= 'm'; char char2= 'y'; char *str = (char *) malloc(sizeof(char) * 3); str[0] = char1; str[1] = char2; str[2] = '\0'; return str; } 

然后,当您调用该函数时,将接收数据的变量的类型必须与函数返回的类型匹配。 所以,你应该:

 char *returned_str = createStr(); 

如果要从函数返回char* ,请确保malloc()它。 堆栈初始化的字符数组在返回时没有意义,因为从该函数返回后访问它们是未定义的行为。

改为

 char* createStr() { char char1= 'm'; char char2= 'y'; char *str = malloc(3 * sizeof(char)); if(str == NULL) return NULL; str[0] = char1; str[1] = char2; str[2] = '\0'; return str; } 
 char* charP = createStr(); 

如果你的function是正确的,这是正确的。 不幸的是,你返回一个指向函数中局部变量的指针,这意味着一旦函数返回它就是指向未定义数据的指针。 您需要为函数中的字符串使用malloc之类的堆分配,以便返回的指针具有任何含义。 然后你需要记住以后释放它。

包括“string.h”使事情变得更容易。 解决问题的更简单方法是:

 #include  char* createStr(){ static char str[20] = "my"; return str; } int main(){ char a[20]; strcpy(a,createStr()); //this will copy the returned value of createStr() into a[] printf("%s",a); return 0; } 

您可以在方法中使用静态数组,以避免在函数结束时丢失数组:

 char * createStr() { char char1= 'm'; char char2= 'y'; static char str[3]; str[0] = char1; str[1] = char2; str[2] = '\0'; return str; 

}