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

C语言中char数组无法直接赋值字符串的原因咨询

为什么C语言中数组不能直接用赋值号赋值字符串?

首先得明确两种写法的本质区别:

1. 数组初始化是合法的

char name[20] = "Alex"; 这是数组初始化语法,在声明数组的同时,C语言允许直接用字符串字面量填充数组内容——它会把字符串的每个字符(包括末尾的结束符\0)依次复制到数组的对应内存位置,这是语言本身支持的特殊语法。

2. 直接赋值数组名是非法的

name2 = "Alex"; 这里犯了两个关键错误:

  • 数组名name2在表达式中会自动转换成指向数组第一个元素的指针(char*类型),但它不是可修改的变量——数组名本质上是一个固定的内存地址标识,不能被重新赋值。
  • 右边的"Alex"是字符串字面量,它会被编译器当作一个const char*类型的指针(指向字符串首字符的地址)。你试图把一个指针赋值给数组这个不可修改的左值,自然会触发“Array type 'char[20]' is not assignable”的错误。

正确的做法:使用字符串复制函数

如果要给已经声明好的数组赋值字符串,需要用<string.h>头文件里的字符串处理函数,比如:

用strcpy(简单直接)

#include <string.h>

int main() {
    char name[20] = "Alex";

    char name2[20];
    strcpy(name2, "Alex"); // 把字符串内容复制到name2数组中
}

用strncpy(更安全,避免缓冲区溢出)

如果不确定字符串长度,建议用strncpy并手动添加结束符,防止数组越界:

#include <string.h>

int main() {
    char name[20] = "Alex";

    char name2[20];
    strncpy(name2, "Alex", sizeof(name2) - 1); // 最多复制19个字符
    name2[sizeof(name2) - 1] = '\0'; // 确保字符串以结束符结尾
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:30:55