使用指针数组来输入五个字符串(字符串不等长),应怎么操作?

boy8765 2004-01-25 10:26:52

1、输入一个字符串,可以这样做。
char* ptr;
ptr=”I love C language!”; //此时的字符串可以是任意长度
2、输入两个字符串,可以这样做。
#include <stdio.h>
#include <string.h>
char (*ptr)[10]; //此为数组指针定义
char arr[2][10];
int i;
ptr=arr;
for(I=0;I<2;I++)
{
gets(*(ptr+I)); //此时输入的字符串不能超过10个字符
}
3、 输入三个以上的字符串,当然可以用第二种情况来做。但是,第二种方法规定了输入的字符串必须要在10个字符内(这是我的理解,不知是否正确),令人觉得拘束、不舒服。是否可以输入五个字符串,字符串满足一个条件:不等长且长度不定。显然,用数组指针(第二种方法)鞭长莫及。我想到用指针数组(形如char* ptr[10])来输入这种条件的五个字符串。理由如下:
在谭浩强的《C程序设计》第二版第255页中有这样一段话:
……
利用指针数组作main函数的形参,可以向程序传送命令行参数(这些参数是字符串),这些字符串的长度事先并不知道,而且各参数字符串的长度一般并不相同,命令行参数的数目也是可以任意的。用指针数组能够较好地满足上述要求。
……
根据上面这段话,我想,既然系统可以调用main函数,那么,我也可以写一个函数(用指针数组作形参),用main函数来调用它,在main函数中传实参(五个字符串)给这个函数。
到这里我就卡壳了,因为我想不出这样的操作是如何实现的。请问各位网友,使用指针数组来输入五个字符串(字符串不等长),应如何进行操作?
...全文
1102 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bm1408 2004-01-25
  • 打赏
  • 举报
回复
不太明白你的意思!
是不是动态生成一个字符数组!
char *ptr=new char[n];
angelo23 2004-01-25
  • 打赏
  • 举报
回复
楼主的意思我不太明白
你要写的函数是形如
foo(char *, char *, char *, char *, char *)
还是形如
foo(char **)
?

另外,“使用指针数组来输入五个字符串(字符串不等长)” ,可以参考一下 The C Programming Language 第五章的相关代码
antijpn 2004-01-25
  • 打赏
  • 举报
回复
楼上的楼上这种代码有严重的问题。
char *str[N]是分配一个大小为3的,指向char*的数组。但是这里面的char*是不确定的,p只是指向一个字符串,但是并没有大小,除非指向已经被分配的内存,否则按照他的代码,这个程序是要出错的。
antijpn 2004-01-25
  • 打赏
  • 举报
回复
其实在这里,[5]只是起到一个分配数组大小的作用,完全可以使用malloc来取代,只不过后面要换成char**而已,操作的时候不象操纵数组这么方便。
KingI 2004-01-25
  • 打赏
  • 举报
回复
#include <stdio.h>
#define N 3
main()
{
char *str[N];
char **p;
int i;
p=str;
for (i=0; i<N; i++)
scanf ("%s",*p++);
p=str;
for (i=0;i<N; i++)
printf ("%s\n",*p++);
}
antijpn 2004-01-25
  • 打赏
  • 举报
回复
楼上的楼上,这个不是C++,没有new操作符的!

楼主的问题,我不知道我的理解对不对。
你要在main()里面调用一个函数,而这个函数的参数是一个指向包含5个字符串的数组的指针。
你可以用char *myPointer[5]来作为参数,myPointer就是指向这个数组首地址的指针,而myPointer[0]就是指向第一个数组的指针,以此类推
randolph5474 2004-01-25
  • 打赏
  • 举报
回复
如果是指镇数组的,那么应该只是保存了数组的地址。
另外申请数组来保存字符串,将地址送入指针数组。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧