C语言语句看看为什么不能这么写?谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/04 01:52:01
char *s;
scanf ("%s",s);
为啥不对呢?
谢谢!
char s[6]={"ABCDE"};s[4]='\0';
请问这个对吗?为什么? s[4]可以重新赋值?

char *s;
scanf ("%s",s);
为啥不对呢?
⇒不会报错,不过,这是种错误的写法。
指针定义后应该先分配内存再进行操作

char s[6]={"ABCDE"};s[4]='\0';
请问这个对吗?为什么? s[4]可以重新赋值?
⇒对。s[6]={"ABCDE"};只是定义一个数组s,并初始化为ABCDE。s[4]='\0';是删除ABCDE中的E.
这种定义,在实际应用中,是可以对其进行操作的。
如果是const数组就不能这么操作了。即:const char s[6]={"ABCDE"};
这种数组织引用,不能改变它的值

1.字符串s没有分配空间,给它分配一个空间结果就对了
2.可以。因为char s[6]={"ABCDE"};就相当于s[0]=‘A’,s[1]='B';s[2]='c';s[3]='D';s[4]='E';s[5]='\0',s[4]当然可以重新赋值了
但是,如果是char *s="ABCDE";就不可以那样操作了,因为s指向的是内存中常量区,是不许用户更改的。

char *s; 只是声明了指针变量,没有分配空间,所以不能以scanf录入
scanf ("%s",s);

char s[6]={"ABCDE"};s[4]='\0'; 当然可以重新赋值。数组元素可重新赋值

scanf ("%s",s); 应改为scanf ("%c",s); 如果要输入字符串可以用for循环
for(i=0;i<20;i++)scanf ("%c",s); 即可!
char s[6]={"ABC