C语言赋值时提示incompatible types类型不兼容错误,求原因及修复方案
报错含义
这个报错的核心原因是指针类型访问层级错误:
- 你定义的
nombre是Nombre*(结构体指针)类型,直接写nombre[0]等价于*(nombre + 0),得到的是一个完整的Nombre结构体对象,不能直接给结构体赋值字符型数值 - 你实际要访问的是
Nombre结构体内部的nombre字符数组成员,需要先访问结构体成员再取下标
代码中的其他隐藏问题
malloc分配的内存大小错误:你当前申请的是9字节的char空间,正确应该申请一个Nombre结构体的大小,否则后续访问有内存越界风险- 字符串结束符赋值逻辑永远不会触发:for循环的判断条件是
i<9,循环内的i最大值为8,if(i == 9)的分支永远不会执行,最终生成的字符串没有\0结束符,后续使用会出现未定义行为
修复后的完整代码
#include <stdlib.h> typedef struct{ char nombre[9]; }Nombre; Nombre* crearNombre(){ // 分配正确的结构体大小 Nombre *nombre = (Nombre*)malloc(sizeof(Nombre)); // 先访问结构体内部的nombre数组,再取下标赋值 nombre->nombre[0] = 'A'+(rand()%26); // 前8位存储随机字符,最后一位固定留作结束符 for (int i=1; i<8; ++i){ nombre->nombre[i] = 'a'+(rand()%26); } // 手动给最后一位赋值字符串结束符 nombre->nombre[8] = '\0'; return nombre; }
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

