You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中覆盖字符数组报错原因解析:为何不能直接赋值字符串?

问题根源:数组名是不可修改的地址常量

你的代码报错核心在于这行:str="girl";——C语言里字符数组的数组名不能直接用赋值号来覆盖整个字符串,原因如下:

  • 当你写char str[]="hello";时,编译器会在栈上分配一块6字节的内存(5个字符加结束符'\0'),并把字符串"hello"的内容逐个拷贝到这块内存里。此时str是数组的名字,它代表的是数组首元素的地址常量——常量意味着它的值不能被修改,你没法给它重新赋值。
  • 而str="girl";这个操作,本质是想把字符串字面量"girl"所在的内存地址(通常在只读数据段)赋值给str,但数组名是常量,不允许被赋值,所以编译器直接会抛出类似「assignment to expression with array type」的错误,程序根本没法正常编译运行,更别说打印"girl"了。

正确的修改方式

要覆盖字符数组的内容,你需要用字符串操作函数或者手动修改数组元素:

  1. 使用strcpy函数(需要包含<string.h>,你已经加了):
    strcpy(str, "girl");
    
    注意要确保数组的大小足够容纳目标字符串(包括结束符'\0'),这里str的大小是6,"girl"加结束符是5,完全没问题。
  2. 手动逐个修改元素:
    str[0] = 'g';
    str[1] = 'i';
    str[2] = 'r';
    str[3] = 'l';
    str[4] = '\0'; // 必须手动加上字符串结束符,否则printf会输出乱码
    

内容的提问来源于stack exchange,提问作者Milo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:15:34