簡體   English   中英

在函數中傳遞給char的指針並在調用者中讀取值

[英]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是按值傳遞。 分配給函數內部的局部變量是瞬時的,效果不會傳遞給調用者的參數變量。

在您的情況下,我懷疑您不想使用分配,而是使用strcpymemcpy 緩沖區復制到調用代碼提供的緩沖區中。

但是請注意,調用代碼會分配足夠大的緩沖區,並讓調用者傳遞緩沖區大小,以免覆蓋可用空間:

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.

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