簡體   English   中英

如何在ANSI C程序中返回字符串數組?

[英]How can I return an array of strings in an ANSI C program?

如何在ANSI C程序中返回字符串數組?

例如:

#include<stdio.h>

#define SIZE 10

char ** ReturnStringArray()
{
    //How to do this?
}

main()
{
    int i=0;

    //How to do here???

    char str ** = ReturnStringArray();

    for(i=0 ; i<SIZE ; i++)
    {
        printf("%s", str[i]);
    }
}

您可以執行以下操作。 為簡便起見,省略了錯誤檢查

char** ReturnStringArray() {
  char** pArray = (char**)malloc(sizeof(char*)*SIZE);
  int i = 0;
  for ( i = 0; i < SIZE; i++ ) {
    pArray[i] = strdup("a string");
  }
  return pArray;
}

請注意,您需要相應地釋放返回的內存。

另外,在您的printf調用中,您可能希望在字符串中包含\\n以確保刷新了緩沖區。 否則,字符串將排隊,並且不會立即打印到控制台。

char** str = ReturnStringArray();
for(i=0 ; i<SIZE ; i++)
{
    printf("%s\n", str[i]);
}

這樣做

#include<stdio.h>

#define SIZE 10

char ** ReturnStringArray()
{
    //How to do this?
    char **strList = (char **)malloc(sizeof(char*) * SIZE);
    int i = 0;
    if (strList != NULL){
         for (i = 0; i < SIZE; i++){
             strList[i] = (char *)malloc(SIZE * sizeof(char) + 1);
             if (strList[i] != NULL){
                sprintf(strList[i], "Foo%d", i);
             }
         }
    }
    return strList;
}

main()
{
    int i=0;

    //How to do here???

    char **str = ReturnStringArray();

    for(i=0 ; i<SIZE ; i++)
    {
        printf("%s", str[i]);
    }
}
  • 問題1:您的雙指針聲明不正確
  • 問題2:您需要知道雙指針中每個指針的字符串大小。
  • 問題3:完成后,您有責任負擔釋放內存的責任。

上面的代碼示例假定字符串的最大大小不會超過SIZE的值,即長度為10個字節...

不要超出雙指針的邊界,因為它會崩潰

請不要強制轉換malloc的返回值,您還沒有包含<stdlib.h> ,正如有人指出,缺少原型會導致將int強制轉換為char **。 偶然地,您的程序可能會也可能根本無法工作。

暫無
暫無

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

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