簡體   English   中英

在 C 和 malloc 用法中返回一個 char 數組

[英]Return an array of char in C and malloc usage

第一次嘗試:

char* loadValues (char* str) {

  char* toReturn[5];

  .. some operations here ..

  return toReturn

}

這顯然會返回警告並且不會正常工作,因為內存位置將在函數完成后被釋放。

所以我想到了使用 malloc,但是,我不明白這如何與數組一起使用。

第二次嘗試:

char* loadValues (char* str) {

  char (*toReturn)[5] = malloc(sizeof *toReturn);

  .. some operations here ..

  return toReturn

}

我的toReturn包含字符串,例如toReturn[0]可能是"Hello"

有什么建議嗎?

據我了解,您想返回一個指針數組並為該數組的指針分配內存。 使用您當前的代碼,您不能返回指針數組,因為它是本地的。 您可以通過以下方式進行:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char** loadValues () {
  char** toReturn;
  int i;
  toReturn = malloc(5*sizeof(char*));
  for(i=0;i<5;i++)
  {
    toReturn[i] = malloc(25); //Change the size as per your need
    strncpy(toReturn[i], "string",i+1); //Something to copy
  }
  return toReturn;
}

int main()
{
  int i; 
  char **arr = loadValues();
  for(i=0;i<5;i++)
  {
    printf("%s\n", arr[i]);
  }

  for(i=0;i<5;i++)
  {
    free(arr[i]);
  }

  free(arr);
  return 0;  
}

注意loadValues的返回類型和為數組分配的內存在main中被釋放。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void loadValues (char **toReturn) {
  int i;
  for(i=0;i<5;i++)
  {
    toReturn[i] = malloc(25); //Change the size as per your need
    strncpy(toReturn[i], "string",i+1); //Something to copy
  }
}

int main()
{
  int i; 
  char *arr[5];
  loadValues(arr);
  for(i=0;i<5;i++)
  {
    printf("%s\n", arr[i]);
  }

  for(i=0;i<5;i++)
  {
    free(arr[i]);
  }

  return 0;  
}

您還應該檢查對malloc的調用是否成功並處理錯誤。

malloc 只是通過分配一塊內存並返回指向開頭的指針來工作。 這里可能有點棘手的是你正在制作的數組不包含字符,它包含指向字符的指針,這意味着你不能簡單地說

char* toReturn[5] = malloc(memory);

據我所知,您需要為 toReturn 的五個字符指針分配足夠的內存,然后遍歷元素和 malloc,無論您認為需要多少內存。 在釋放數組本身之前,要格外小心,記得再次遍歷數組並在完成后釋放所有內存。

暫無
暫無

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

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