题目:
char st[5];
st[0]='G';
疑惑:
1.明白st[0]="good";这种是错的,因为不能把字符串赋值给一个字符数组元素。
2.知道数组定义结束后就不能再进行初始化,初始化必须在定义中完成,如果需要定义后再初始化,就需要用循环或者库函数来进行。
3.但是不明白为什么不能定义后再赋值,感觉理论上来说题目这样的写法能说的通啊?😕
如有帮助给个采纳,下个问题不迷路的呢!!
你说的是对的 , 第一 在C语言中,不能将字符串直接赋值给字符数组的一个元素。这是因为字符串是一系列字符的集合,需要使用字符数组来存储完整的字符串。
第二个 也是对的
代码
char st[5];
st[0] = 'G';
这是有效的赋值操作,将字符 'G' 赋值给了字符数组 st 的第一个元素 st[0]。
第三点 : 你可以在定义字符数组后进行赋值操作,但是需要使用适当的函数或者循环来复制字符串到字符数组中。不能直接将字符串赋值给一个字符数组元素。
修改如下 :
#include <string.h>
char st[5];
strncpy(st, "good", sizeof(st));
当然可以,谁告诉你不行的
char st[5];
st[0]='G';
这个写法是可以的
还可以写
strcpy(st, "Good");
为什么不能定义后再赋值?严格来说,C语言中没有字符串,只有字符数组。
可以定以后再赋值
st[0] = 'G' 正确
int i;
char str[10];
// for循环输入赋值
for (i = 0; i<10;++i)
{
scanf("%c",&str[i]);
}
// 库函数赋值
strcpy(str, "good");
可以定义后再赋值,供参考:
#include <stdio.h>
#include <string.h>
int main()
{
char st[5];
st[0] = 'G';st[1] = 'o';st[2] = 'o';st[3] = 'd'; st[4] = '\0';
printf("%d %s", strlen(st), st);
return 0;
}
你还在用‘>’‘<’‘=’等比较字符串吗?
事实上,用大于小于比较字符串的方法是不对的。我们看一下两种常见的错误方法
#include<stdio.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abc";
if (arr1 < arr2)
{
}
if ("abcdef" < "abc")
{
}
}