char * str[5]; int i; for(i=0;i<5;i++) { scanf("%s",str); // 这里这么写 正确吗 为什么? } 我这样写的 在接受时 没异常 但 后面接着输出 就出异常!!!
数组名表示的是数组的首地址!每次循环只是给数组的第0个元素赋值,而并不是给数组的每个素赋值,所以除了0元素其余的数组元素是不确定的!所以输出当然会出错了!
改为:scanf("%c",str+i);或scanf("%c",&str[i]);
看你的意思,是想定义一个包含5个字符串的数组,那么在赋值前必须为每个字符串申请内存
可以我接收啊!试试下面的小程序main(){ char * str[5]; int i; for(i=0;i<5;i++) { scanf("%s",str[i]); }
printf("%s,%s",str[1],str[3]); getch(); return 0;}INPUTfollowbasicgreatfortrancomputerOUTPUTbasic,fortran我用的是wintc2.01编译的,没有错
[此贴子已经被作者于2006-11-22 13:18:52编辑过]
请问,可以给出详细的解释吗?不是很了解!谢谢!
不是内存泄漏,而是没有分配内存,这是很危险的只声明了指针数组,但是没有给数组中的各指针分配一个可以存储字符串的内存单元可改为main(){ char str[5][10]; int i; for(i=0;i<5;i++) { scanf("%s",str[i]); }
printf("%s,%s",str[1],str[3]); getch(); return 0;}
记住了!谢谢楼上的!