我不知道你要讨论的问题是什么,但我猜你是想讨论 a里面的值对吗?我知道你的意思,你是说a.a的值是ch所指向的那串字符串,又想证明编译器有问题,对吗?
其实,是你的编程技术不够精通,只要是对C语言精通一点的人都理解这是为什么?并不是编译器有问题,只能用一句话来说明这些,那就是“C 语言太灵活了”。
其实,是你的编程技术不够精通,只要是对C语言精通一点的人都理解这是为什么?并不是编译器有问题,只能用一句话来说明这些,那就是“C 语言太灵活了”。
char a[1] a为指向char指针
char a,a 为char变量,
char a[1];
int b;
};虽然A.a只能放一个字节,但编译器理解 char a[1]为字符串,当用 strcpy(ch,a.a)编译器也认为正确的,因为 a.a事实上就是一个字符串字针。
这样做只是 a.a后面的内存数据被破坏,如果按C语言来说,这个程序员犯了低级错误。
2、a.a实际上是一个不可变的地址,但是我怎样往里面添加更多内容?自己不是很清楚的请不要误导别人
strcuct A{
int b;
char a[];
}
这样a可以连续动态分配内存struct A {
char a[1];
int b;
}
没用过,关注,我试验一下
你这么用strcuct A{
int b;
char a[];
};
我以前用过
不过现在我都这么用
strcuct A{
int b;
char a[1];
};
我见过很多结构都是这么定的如MS的
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *PBITMAPINFO; 调色板的颜色数据如何写入bmiColors[1]?
struct A{
int b;
char a[];
};
sizeof(A) == sizeof(int);struct A{
int b;
char a[1];
};
sizeof(A) == sizeof(int)+ sizeof(char);
如果是char a[]的话
A *pA = (struct A*)malloc(sizeof(A) + a的字节数);如果是a[1],计算时就需要减去一个字节
示意如下:
A *pA = malloc(sizeof(A) + sizeof(A.a) * (N -1))
不明白!!老字号的牛们都哪里去了?我这里要讨论两个问题:1、strcpy(a.a, ch);之后ch里面的内容被清空,为什么?
2、a.a实际上是一个不可变的地址,但是我怎样往里面添加更多内容?自己不是很清楚的请不要误导别人 -----------------------------------------------------------------------
你懂不懂 内存结构,我建议你再去好好的听听老师的课。别在这里乱吹