C语言字符串数组

jansonleader 2010-04-14 10:05:26
如何定一个字符串数组(或其他指针数组也行),实现类似赋值,读取等功能?例如:
------------------------------------------------------------------------------
keyWord a[3][2];
a[3][0] = "Google";
a[3][1] = "Baidu";
a[2][0] = "MSN";
...

printf("%s\n",a[3][0]);
printf("%s\n",a[3][1]);
printf("%s\n",a[2][0]);
...
------------------------------------------------------------------------------
请指点,不胜感激!
...全文
3549 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jansonleader 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]
多一少一错误占程序员常犯错误的60%以上!
[/Quote]
谢谢提醒。受教了!
jansonleader 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 netlover2008 的回复:]
char* a[3];

a[0] = "Google";
a[1] = "Baidu";
a[2] = "MSN";

printf("%s\n",a[0]);
printf("%s\n",a[1]);
printf("%s\n",a[2]);

为什么不用这种方式?
[/Quote]
-------------------------------------
这种做法好像有问题吧?char *a[3]定义一个字符型指针数组,然后a[0] = "Google",将a[0]这个字符型指针指向一个字符串。我觉得有点问题,不知道是不是这样。请指点!
jansonleader 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lhcwjy 的回复:]
keyWord a[3][7];第二维要比最长的字串的长度多1
strcpy(a[0], "Google");
strcpy(a[1],"Baidu");
strcpy(a[2], "MSN");
...

printf("%s\n",a[0]);
printf("%s\n",a[1]);
printf("%s\n",a[2]);
[/Quote]

感谢解答。你的方法是我想要的。
jansonleader 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 jansonleader 的回复:]
如何定一个字符串数组(或其他指针数组也行),实现类似赋值,读取等功能?例如:
------------------------------------------------------------------------------
keyWord a[3][2];
a[3][0] = "Google";
a[3][1] = "Baidu";
a[2][0] = "MSN";
...……
[/Quote]
上面的数组随手写的,写错了哈!a[3][2] 下标最多到a[2][1]。谢谢各位!
bladesoft 2010-04-14
  • 打赏
  • 举报
回复
申请空间,strcpy就可以
赵4老师 2010-04-14
  • 打赏
  • 举报
回复
多一少一错误占程序员常犯错误的60%以上!
十八道胡同 2010-04-14
  • 打赏
  • 举报
回复
可以使用strcpy来解决这个问题
strcpy(a[0], "Google");
bobo364 2010-04-14
  • 打赏
  • 举报
回复
可以用指针数组,看看下面



这个问题大家应该都碰到过,指针数组和数组指针,刚开始看时觉得还是能看懂,但是过些时又搞混了,最后发现还是没有真正理解。

下面就简单说说这两个概念:一:指针数组,顾名思义,就是说的首先是一个数组吧,然后数组的元素是指针而已。说明形式为:type *pointer_array[constant1][constant2]...[constantn]; 例如:int *pai[3]; 由于‘*’是自右向左结合,因此从右向左看,首先看到[4]说明是一个数组,是一个包含4个元素的数组,然后看到‘*’,显然是指针类型,由此可以看出数组中存放的是指针而不是一般的类型。同理,char *pac[2][3]是包含有6个元素,每一个元素都是一个字符型指针。再来说说他们的初始化: int *pai[3];既然是一个包含4个整形指针的数组那么其对应的将是一个二维整形数组,因为一个整形指针对应一个一维整形数组。那我就用一个二维整形数组来初始化它,事实上一般也都是这么做的,这里有一个二维数组,int arr[3][2]={{1,2},{3,4},{5,6}},一个三行两列的整形数组,注意这里的行必须和你的指针数组的维数一致,否则是不允许的,不信你可以试试。这个初始化有很多种选择,以下只列举常见的两中:第一种也是很好理解的: for(int i=0;i<3;i++) pai[i]=arr[i]; 显然arr[i]是每一行的首地址,相当于一个一维数组的数组名,如是把它送给一个整形指针pai[i]是理所当然的了。

第二种方法:在说明指针数组时就初始化:int (*ap)[2]={{1,2},{3,4},{5,6}};哈哈这个不用说了吧。

注意:不能将二维数组的数组名赋给指针数组的数组名,pai=arr(错),因为两者的类型不一致,二维数组名的类型是指向int[][]型的指针,而指针数组的的数组名是指向int *[]类型的指针。

在c/c++语言中,指针数组最常用的场合就是说明一个字符串数组。即说明一个数组,它的每个元素都是一个字符串。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gotomic/archive/2008/07/02/2606791.aspx
liuchai910 2010-04-14
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *a[3];
int i;
for(i=0;i<3;i++)
a[i]=(char*)malloc(7*sizeof(char));
strcpy(a[0],"Google");strcpy(a[1],"BaiDu");strcpy(a[2],"MSN");
for(i=0;i<3;i++)
printf("%s\n",a[i]);
for(i=0;i<3;i++)
if(a[i]){
free(a[i]);a[i]=NULL;
}
return 1;
}类似这样的赋值可以,还有其他的办法,例如,定义char **a;然后动态申请两次内存空间也是可以的。
rtygbwwwerr 2010-04-14
  • 打赏
  • 举报
回复
然后是输出:
printf("%s\n",a[0]);
printf("%s\n",a[1]);
printf("%s\n",a[2]);
rtygbwwwerr 2010-04-14
  • 打赏
  • 举报
回复
char* a[3];

a[0] = "Google";
a[1] = "Baidu";
a[2] = "MSN";
白云飘飘飘 2010-04-14
  • 打赏
  • 举报
回复
keyWord a[3][7];第二维要比最长的字串的长度多1
strcpy(a[0], "Google");
strcpy(a[1],"Baidu");
strcpy(a[2], "MSN");
...

printf("%s\n",a[0]);
printf("%s\n",a[1]);
printf("%s\n",a[2]);
fox000002 2010-04-14
  • 打赏
  • 举报
回复
a[3][0] = "Google";


这个只能传递指针

不是 C++,没法进行重载
netlover2008 2010-04-14
  • 打赏
  • 举报
回复
char* a[3];

a[0] = "Google";
a[1] = "Baidu";
a[2] = "MSN";

printf("%s\n",a[0]);
printf("%s\n",a[1]);
printf("%s\n",a[2]);

为什么不用这种方式?

69,371

社区成员

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

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