在struct中将const char转换为char时出错?

时间:2010-12-24 20:58:30

标签: c char const

这有点是从记忆中写的,所以如果我在这篇文章中犯了错误,我会道歉。我创建了一个结构,并希望为其指定一个名称,但是我收到了这个错误:

  

错误:分配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);
}  

4 个答案:

答案 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”);