代码之家  ›  专栏  ›  技术社区  ›  user366312

如何在ansic程序中返回字符串数组?

  •  2
  • user366312  · 技术社区  · 15 年前

    如何在ansic程序中返回字符串数组?

    例如:

    #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 回复  |  直到 10 年前
        1
  •  3
  •   JaredPar    15 年前

    你可以这样做。为简洁起见,省略了错误检查

    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]);
    }
    
        2
  •  2
  •   t0mm13b    15 年前

    这样做吧

    #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:您的双指针声明不正确
    • 问题3:处理完内存后,你有责任释放内存。。

    上面的代码示例假定字符串的最大大小不会超过 SIZE

    不要超出双指针的边界,因为它会崩溃

        3
  •  1
  •   cyber_raj    15 年前

    请不要打马洛克的回报,你没有包括在内 <stdlib.h> 正如上面有人指出的,缺少原型会导致int被转换成char**。不小心你的程序可能会工作,也可能根本不工作。