返回指向字符串的指针数组

时间:2013-09-23 06:10:39

标签: c arrays string function pointers

我感到困惑和无能为力,因为如何从函数返回指向String(基本上是2D数组)的指针数组。

我在这段代码中做了(或将要做的),首先插入单词/名称,然后将其存储在数组中,并输入数字'n'。比我将这个数组和数字传递给函数,并从数组中提取最后的'n'个名称/单词,然后在主数据中打印出来。

这是我的代码:

#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<string.h>
char** fun(char *s[5],int no)
{
    char *f[5];
    int i,j=0;
    for(i=5-no;i<5;i++)
    {
        f[j]=(char*)malloc(strlen(s[i])+1);
        strcpy(f[j],s[i]);
        j++;
    }
    /*for(j=0;j<no;j++)         //I did it just to check whether 'f' stores the last 'n' names.
    printf("\n%d. %s",j+1,f[j]);*/
    return f;
}
void main()
{
    char *name[5],*str,*list[5];
    int i,n;
    clrscr();
    printf("Enther the Names of the list : " );
    for(i=0;i<5;i++)
    {
        printf("%d. ",i+1);
        str=(char*)malloc(30);
        gets(str);
        name[i]=(char*)malloc(strlen(str)+1);
        strcpy(name[i],str);
        free(str);
    }
    clrscr();
    printf("\nEntered Names are : ");
    for(i=0;i<5;i++)
    printf("\n%d. %s",i+1,name[i]);
    printf("\n Enter the no. :");
    scanf("%d",&n);
    *list=*fun(name,n); // I am little confused as to how should I wrote this ?
    for(i=0;i<n;i++)
    printf("\n%d. %s",i+1,list[i]);
    getch();
}

假设我将输入作为:

1.the

2.there

3.this

4.that

5.therefore

输入编号:3

输出:

 1.this

 2.<Some special characters>

 3.<Some special characters>

我对使用指针方法的方法更感兴趣。 PS:我正在使用Turbo C / C ++ IDE,因为我处于C的学习阶段。

2 个答案:

答案 0 :(得分:0)

H2CO3 指出时,将fun定义为fun(list, name, n);,其中list是字符串的输出列表。从list传递main(),在fun()内填写。

答案 1 :(得分:0)

你不能在本地定义char指针数组(它将在堆栈上分配它。它的范围仅在该函数内)并全局使用它。 在fun()里面你可以使用  char f =(char )malloc(sizeof(char * [5])); (在堆上分配可以全局使用它的内存) 代替  char * f [5];

代码应该是:

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include <malloc.h>
char** fun(char *s[5],int no)
{
    char **f = (char**)malloc(sizeof(char*[5]));
    int i,j=0;
    for(i=5-no;i<5;i++)
    {
        f[j]=(char*)malloc(strlen(s[i])+1);
        strcpy(f[j],s[i]);
        j++;
    }
    /*for(j=0;j<no;j++)         //I did it just to check whether 'f' stores the last 'n' names.
    printf("\n%d. %s",j+1,f[j]);*/
    return f;
}

    void main()
    {
        char *name[5],*str,**list;
        int i,n;

        printf("Enther the Names of the list : " );
        for(i=0;i<5;i++)
        {
            printf("%d. ",i+1);
            str=(char*)malloc(30);
            gets(str);
            name[i]=(char*)malloc(strlen(str)+1);
            strcpy(name[i],str);
            free(str);
        }

        printf("\nEntered Names are : ");
        for(i=0;i<5;i++)
            printf("\n%d. %s",i+1,name[i]);
        printf("\n Enter the no. :");
        scanf("%d",&n);
        list=fun(name,n); // I am little confused as to how should I wrote this ?
        for(i=0;i<n;i++)
            printf("\n%d. %s",i+1,list[i]);
        getch();
    }