C语言结构体char数组成员无法输出问题排查
问题原因分析
- 你定位的代码行
p1.myArray = "HELLO!"确实是错误根源:C语言中数组名是不可修改的左值,不能直接用赋值运算符给数组整体赋值。你这里的写法试图把字符串常量"HELLO!"的首地址直接赋值给数组名myArray,属于明确的语法错误,编译器会直接抛出报错,不会生成可执行文件。
修复方案
你可以用以下两种常用合法方案给结构体的char数组成员赋值:
- 运行时赋值使用
string.h头文件的strcpy函数拷贝字符串
修改后可运行的完整代码如下:
#include <stdio.h> // 引入string.h头文件提供strcpy实现 #include <string.h> struct myStruct { int myInt; float myFloat; char myArray[40]; }; int main() { struct myStruct p1; p1.myInt = 80; p1.myFloat = 3.14; printf("Integer: %d\n", p1.myInt); printf("Float: %f\n", p1.myFloat); // 把字符串内容拷贝到myArray对应的内存空间中 strcpy(p1.myArray, "HELLO!"); printf("Array: %s\n", p1.myArray); return 0; }
- 如果是定义结构体变量的同时初始化,可以直接用字符串字面量赋值:
// 初始化语法不属于运行时赋值,符合C标准要求 struct myStruct p1 = {80, 3.14, "HELLO!"};
内容的提问来源于stack exchange,提问作者user16307
相关产品推荐
相关产品推荐

