[英]Understanding pointers used for out-parameters in C/C++
答案中包含以下代碼:
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.