第1个回答 2009-03-14
#include <stdio.h>
main()
{
char s[4][5] = {"AAAA","BBBB","CC","DD"};
printf("\"%s\"\n",s[1]);
}
程序应该是这样的,输出"BBBB"。
个人认为:4行5列,s[1]表示第二行就输出"BBBB"了。
第3个回答 2009-03-15
不知道阁下看的是什么书?这么前卫。我2006年学C语言,后面还一直在编些程序,但就是没遇到过char s[4][4]={"AAAA","BBBB","CC","DD"}; 这种定义时初始化也是合法的。
无论从课本上(我学的是科学技术出版社的)学习、还是编译器上(用过TC、VC6.0)调试,我都觉得char s[4][4]={"AAAA","BBBB","CC","DD"}; 是错误的,事实上编译器确实是会报错,这种定义时赋值越界!改为char s[4][5]={"AAAA","BBBB","CC","DD"};这样才是对的。
看了楼上的回答,说是ANSI C有了新的规定,为了学点新知识我特意去查了下:ANSI C就是美国国家标准协会制定的一个C语言的标准,于1983年发表。ANSI C是C语言的标准,任何C语言的编译器都在ANSI C的基础上扩充。照这么说,VC应该支持char s[4][4]={"AAAA","BBBB","CC","DD"}; 这种写法,但是事实上VC不支持!所以还是觉得改为char s[4][5]={"AAAA","BBBB","CC","DD"};才是对的。
char s[4][4]={"AAAA","BBBB","CC","DD"}; 这种写法在VC编译器上真的通不过。char s[4][5]={"AAAA","BBBB","CC","DD"};能通过,printf("\"%s\"\n",s[1]); 输出的是"BBBB" 。因为s[0]、 s[1]、s[2]、s[3]指向的是一行(相当于行指针一样),输出的是一个字符串。 \" 是转义字符,表示的是双引号的一半。所以输出时\" \"对应的是一对双引号。
说到这里,我真有点好奇了,不知阁下看的书是什么书,不会是研究C语言发展,在探讨和改进的吧?
第4个回答 2009-03-14
#include <stdio.h>
void main()
{
char s[4][5] = {"AAAA","BBBB","CC","DD"};
printf("%s\n", s[1]);
}