#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;
}
你在程序中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了以后就会出现这个,这样错误就好找了。
另外指针申明的时候最好初始化为NULL.
你看你用第二个的时候程序可能不会出现 XXXXX指令引用XXXXX内存不能为read / write. 出现这个问题一般都是指针引用了非法位置,或数组越界了。
初始化为NULL了以后就会出现这个,这样错误就好找了。
第2个回答 2010-01-18
gets参数为char *
而str[i]本身即为char *
&str[i]则为char **
类型不匹配而发生的警告
还有lz你没有为str指针数组开辟空间,运行应该有内存错误。
而str[i]本身即为char *
&str[i]则为char **
类型不匹配而发生的警告
还有lz你没有为str指针数组开辟空间,运行应该有内存错误。
第3个回答 2010-01-18
看错了 一楼对