C语言初级问题

以下语句中存在语法错误的是_____
A) cahr ss[6][20];ss[1]="right?";
B) char ss[][20]={"right? "};
C) char *ss[6];ss[1]="right?";
D) char *ss[]={"right? "};
请解析一下,谢谢。
明白,yu71941628答得不错,A应该怎样改才算正确?

a 是 错误的 我刚用c编译器编译过 其他三项都是 0 error 0 warning 。而a是1个 error。(a 应该是 char 吧 你打错了,改过来后还是1个error)
解释如下:
ss【6】【20】 其中ss是一个指向20个字符的指针。而ss【1】正是指向了 ss起始地址+20个字符的地方。那么如此说来a的意思应该是将ss+20 到ss+40的地方赋值为 right? 这看似正确。
但是你想一想 你如果定义了一个char a【20】;然后再写 a【20】=“right?” 会出现什么情况呢? 对了,这是一个错误,因为a是一个指向变量的指针而不是指向常量的地址。而“right?” 是一个字符串常量。所以会出现error。 那么这个题目是一样的道理。 “right?” 是一个常量 而不是ss[1]所指向的变量。所以会出现error。明白了么? 不明白再问我啊。希望对你有所帮助,呵呵。
在 c 编译器里 就用strcpy函数吧 这是我写的代码 0 error 0 warning
#include <stdio.h>
#include <string.h>
void main()
{
char ss[6][20];
strcpy(ss[1],"right?");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-09-13
选A
姑且不论拼写错误,对于一个定义好的数组,是不能在定以过后,直接大面积赋值的,可以在定义的时候初值化。
与A类似的C却是正确的,因为貌似一样但ss[1]是数组的单个元素,是可以直接赋值的,类似于int a[6];a[1]=1.
B、D都是初值化,故正确。
第2个回答  2008-09-13
C错了`
第3个回答  2008-09-13
选A,4楼说的对,"right?"是一个字符串常量,ss[1]里只能存放地址,地址是不能这样赋值的
第4个回答  2008-09-13
c错了

C定义的是字符数组,也是一维数组,长度是6,而它的赋值中SS[1]这个是表示SS数组中的第2个元素只能存放一个字符,怎么把字符串赋给它呢。
第5个回答  2008-09-13
A错了,B编译时自动初始为char ss[0][22]={"right?"};C,D为指针数组的运用,D同B
相似回答