c语言字符串初始化没有0,C 语言里为什么这样初始化字符串是错误的?

"本文解析了为何在C语言中,直接将字符串赋值给未初始化的数组会导致错误,强调了字符数组与指针的区别。通过实例对比展示了为什么`char str[4] = "abc"`可行,而`char str[4]; str = "abc";`会报错。"
摘要由CSDN通过智能技术生成

C 语言里的字符串实际上就是 char 组成的数组,所以

#include

int main(void) {

char str[4] = "abc";

for (size_t i = 0; i < 3; i++) {

printf("%c\n", str[i]);

}

return 0;

}

是可行的,正常输出没啥问题。

因为双引号""括起来的字符串实际上返回的是这个字符串第一个字符的地址,所以

#include

int main(void) {

char *str;

str = "abc"; // 把这个字符串的首地址赋给 str

for (size_t i = 0; i < 3; i++) {

printf("%c\n", str[i]);

}

return 0;

}

也是可行的。

但是为什么:

#include

int main(void) {

char str[4];

str = "abc";

for (size_t i = 0; i < 3; i++) {

printf("%c\n", str[i]);

}

return 0;

}

就不行了呢?在我的电脑上报错:

error: array type 'char [4]' is not assignable

str = "abc";

照常理来说,声明了 char str[4],那么 str 就代表了这个 char 数组的首地址。

而按照上面第二个例子,"abc" 返回的就是这个 char 数组的首地址,感觉这个是跟上面的第二个例子是没有区别的啊,应该可以正常赋值的啊,

为什么就不行了呢?求一个合理的解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值