[英]Passing to pointer to char in function and read value in caller
我想將指針傳遞給一個函數,該指針將該指針傳遞給另一個指向數組的函數,並且在此函數結束后,我想讀取調用函數中的值。
所以這是示例代碼,我希望它如何工作:
void fun_1(const char *data)
{
/* some code */
fun_2(data);
}
void fun_2(const char *data)
{
/* some code */
fun_3(data);
}
static bool fun_3(const char *data)
{
static char buffer[20];
/* some code */
data = buffer;
return true;
}
而要使fun_1功能,我想傳遞靜態char * resp,並在fun_3結束后我想要具有緩沖區的地址,然后從中讀出,但是現在fun_3結束時,resp始終為NULL。
C是按值傳遞。 分配給函數內部的局部變量是瞬時的,效果不會傳遞給調用者的參數變量。
在您的情況下,我懷疑您不想使用分配,而是使用strcpy
或memcpy
將緩沖區復制到調用代碼提供的緩沖區中。
但是請注意,調用代碼會分配足夠大的緩沖區,並讓調用者傳遞緩沖區大小,以免覆蓋可用空間:
static bool fun_3(const char *data, size_t size) {
char buffer[20];
if (size < sizeof buffer) return false;
/* some code */
memcpy(data, buffer, sizeof buffer);
return true;
}
char buffer[25];
bool success = fun_3(buffer, sizeof buffer);
或者,如果您確實要返回指向局部靜態變量的指針(但請仔細考慮其含義!尤其是線程安全性),則可以
返回指針:
char *fun_3() { static char buffer[20]; /* some code */ return buffer; }
char *buffer = fun_3();
通過指針傳遞:
static bool fun_3(const char **data) { static char buffer[20]; /* some code */ *data = buffer; return true; }
char* buffer; bool result = fun_3(&buffer);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.