簡體   English   中英

了解用於C / C ++中的參數的指針

[英]Understanding pointers used for out-parameters in C/C++

如何從函數返回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相對較新,並且對指針有基本的了解)

謝謝。

為什么不起作用?

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."); 
 }

如果要內存重用-這是一個危險的地方,是否必須認真考慮分配/解除分配責任,則應使用指向字符串的指針,即:

#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.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM