c语言指针数组的输入

#include <stdio.h>

main()
{
char *str[5];
int i;

for(i=0;i<5;i++)
gets(&str[i]);
for(i=0;i<5;i++)
puts(&str[i]);
}
这样有警告,为什么?
#include <stdio.h>

main()
{
char *str[5];
int i;

for(i=0;i<5;i++)
gets(str[i]);
for(i=0;i<5;i++)
puts(str[i]);
}
这样又出不来?为什么?str[i]不是就是个地址啊?

要使用指针就必须让指针指向有效的地址。
你在程序中char *str[5];处声明了5个指针,但是这些指针并没有指向有效的地址,所以它们是非法的,不能直接使用,否则就会出现非法访问的错误。

你可以像下边这样做:

#include <stdio.h>

main()
{
char str[5][80];
int i;

for(i=0;i<5;i++)
gets(str[i]);
for(i=0;i<5;i++)
puts(str[i]);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-19
同意二楼。

另外指针申明的时候最好初始化为NULL.

你看你用第二个的时候程序可能不会出现 XXXXX指令引用XXXXX内存不能为read / write. 出现这个问题一般都是指针引用了非法位置,或数组越界了。

初始化为NULL了以后就会出现这个,这样错误就好找了。
第2个回答  2010-01-18
gets参数为char *
而str[i]本身即为char *
&str[i]则为char **
类型不匹配而发生的警告

还有lz你没有为str指针数组开辟空间,运行应该有内存错误。
第3个回答  2010-01-18
看错了 一楼对

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网