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

C语言结构体char成员赋值多字符报错及仅打印末位问题咨询

触发警告及输出异常的原因

  1. char类型的存储限制
    C语言中char类型仅能存储1字节长度的单个ASCII字符,使用单引号'包裹的内容如果是单个字符(如'X'),属于合法的char类型字面量,赋值给char类型变量不会报错,运行输出也正常,这就是你给name赋值'X'没有问题的原因。
    如果单引号内包裹了多个字符,这种语法属于多字节字符常量,本质是int类型,默认最大长度和系统的int长度一致(通常为4字节),超过该长度就会触发编译器的长度过长警告。你的代码中'Character'包含9个字符,远超过长度限制,因此会抛出警告。

  2. 仅打印最后一位字符的原因
    C语言标准没有对多字节字符常量的存储规则做强制统一,但目前主流编译器(GCC、MSVC等)都默认采用小端序存储多字节字符常量,即把字符序列的最后一个字符存储在最低地址位。
    当你把多字节字符常量赋值给1字节的char类型变量时,编译器只会截取最低地址位的1个字节写入变量,也就是取到了最后一个字符r,因此打印fav_char时只会输出r。

修复建议

如果你需要存储字符串(多个字符),可以将结构体中对应的字段修改为字符数组,赋值时使用strcpy函数,示例修改如下:

#include<stdio.h>
#include<string.h>

struct Student 
{
    int id;
    int marks; 
    // 改为字符数组,长度可根据需要调整
    char fav_char[20]; 
    char name[20];
};

int main()
{
    struct Student s1;
    s1.id = 1;
    s1.marks = 90;
    // 字符串需要用双引号包裹,用strcpy赋值给字符数组
    strcpy(s1.fav_char, "Character");
    strcpy(s1.name, "X");

    printf("The favorite character is %s \n" , s1.fav_char);
    printf("The name is %s" , s1.name);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:03