2010-08-24 76 views
2

如何在ANSI C程序中返回字符串數組?如何在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]); 
    } 
} 

回答

3

你可以做到以下幾點。錯誤檢查爲簡潔省略

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]); 
} 
+0

@JMSA增加了一些打印代碼。 – JaredPar 2010-08-24 00:38:32

+0

你沒有修復代碼錯誤,因此我的-1 ....看看行字符str ** = .....:P – t0mm13b 2010-08-24 00:43:34

+0

@ tommieb75固定 – JaredPar 2010-08-24 00:48:32

2

做這種方式

#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個字節......

不要去雙指針的邊界之外,因爲它會崩潰

+0

我做了同樣的事情。但是在main()中我寫道: - for(i = 0; i anonymous 2010-08-24 00:31:16

+0

@JMSA:for(i = 0; i t0mm13b 2010-08-24 00:45:44

1

請不要typecast malloc的返回,你還沒有包含<stdlib.h>,正如有人指出上面缺少原型會導致int被轉換爲char **。有意思的是,你的程序可能根本無法工作。

+0

但是這個問題甚至不使用'malloc'?這似乎並沒有回答這個問題。 – 2010-08-30 07:40:15

+0

我不好,我參考的是tommieb的帖子。 – 2010-08-30 15:50:52