我感到困惑和无能为力,因为如何从函数返回指向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的学习阶段。
答案 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();
}