字符数组在定义后,为什么不可以把单独字符赋值给数组中某一个元素?(语言-c语言)

题目:
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;
}