0

如何从函数返回 char 数组?

答案中有以下代码:

void testfunc(char* outStr){
  char str[10];
  for(int i=0; i < 10; ++i){
    outStr[i] = str[i];
  }
}

int main(){
  char myStr[10];
  testfunc(myStr);
  // myStr is now filled
}

由于我将使用内存宝贵的 Arduino,我不想要一个“临时变量”来存储一些字符串然后将其复制过来。我也不希望函数返回任何东西。我想使用上面的想法并执行以下操作:

 void testfunc(char* outStr){
     outStr="Hi there.";
  }

int main(){
  char myStr[10];
  testfunc(myStr);

}

但是,在这种情况下 myStr 是空的!

为什么这不起作用?我如何解决它?

(我对 C 比较陌生,并且对指针有基本的了解)

谢谢。

4

2 回答 2

1

为什么这不起作用?

void testfunc(char* outStr){
     outStr="Hi there.";
 }

你有:

testfunc(myStr);

testfunc被调用时,outStr被分配第一个元素的地址myStr。但是在testfunc函数中,你覆盖outStr它,它现在指向一个字符串文字。你只是在修改ouStr,而不是myStr.

我如何解决它?

要复制字符串,请使用 strcpy函数(或其安全姐妹strncpy):

void testfunc(char* outStr){
     strcpy(ouStr, "Hi there."); 
 }
于 2013-11-06T22:07:18.557 回答
0

如果你想要内存重用 - 这是一个危险的地方,你必须非常小心分配/释放责任,你应该使用指向字符串的指针,即:

#define STATIC_STRING "Hi there"

void testfunc(char**outStr){
    *outStr=STATIC_STRING;
}

int main(){
   char*myStr;
   testfunc(&myStr);
   //From now on, myStr is a string using preallocated memory.
}
于 2013-11-07T11:32:44.487 回答