这有点是从记忆中写的,所以如果我在这篇文章中犯了错误,我会道歉。我创建了一个结构,并希望为其指定一个名称,但是我收到了这个错误:
错误:分配
时出现不兼容的类型const char[3]' to
char [15]'
对于我的生活,我试图理解这里到底出了什么问题,我认为仍然可以指定一个常量字符。
# include <stdio.h>
struct type{
char name[15];
int age;
};
main(){
struct type foo;
foo.name = "bar"; //error here
foo.age=40;
printf("Name- %s - Age: %d", foo.name, foo.age);
}
答案 0 :(得分:4)
name是固定大小的静态缓冲区。您需要使用strcpy或类似函数为其分配字符串值。如果您将其更改为const char* name
,那么您的代码应按原样运行。
答案 1 :(得分:3)
char name[15];
声明数组,它不能在C中分配。使用string copying routines复制值,或将name
声明为指针 - {{ 1}}(这里你必须担心内存指向仍然有效)。
您可以初始化结构类型变量作为一个整体:
char* name;
此处字符串文字struct type foo = { "bar", 40 };
(包括零终结符的四个字节)将被复制到"bar"
成员数组中。
答案 2 :(得分:1)
您需要使用strcpy
复制字符串的内容。
答案 3 :(得分:0)
他将初始化程序与作业混淆。
创建对象后(“struct type foo;”行),你必须strcpy进入“name”。
struct type foo; foo.name =“bar”; // error here&lt;&lt; =编译器此时只能进行指针赋值,这是无效的。
==============
不要写这个糟糕的代码:
strcpy_s(foo.name,15,“bar”);
以下内容允许您在一个地方更改长度:
strcpy_s(foo.name,sizeof(foo.name),“bar”);