为什么我不能像正常一样初始化 typedef 结构字符串或字符?
Why can't I initialize a typedef struct string or char as normally?
我在编程和c 。
在Linux上编程,我正在创建一个Typedef结构:
typedef struct {
char id[10];
string name[20];
}Employee;
通常,当不使用struct时,我初始化字符串char do:
char id[10]="ID02093";
string name="Joe";
那么,为什么我不能如下初始化员工结构的字符ID和字符串名称?:
Employee salesManager;
salesManager.id="ID02093";
salesManager.name="Joe";
我从G 编译器中获取此错误:
"分配'const char [8]'到'char [9]'的不兼容类型 salesmanager.id =" id02093";"'const分配中的不兼容类型 char [4]'至'std :: __ cxx11 :: string [20] {aka std :: __ cxx11 :: basic_string [20]}’salesmanager.name =" joe";
从Typedef struct声明中初始化字符串和字符字符串和字符的正确方法是什么?
初始化和分配是两个不同(但类似)的东西。
您可以在声明/定义它时通过提供值来初始化数组。
您无法分配到数组。
您可以使用 memcpy
或 strcpy
copy 复制
char name[20];
strcpy(name, "Test";
但是,出于您的目的,您可以将数组初始化为结构的初始化的一部分:
typedef struct {
char id[10];
char name[20];
} Employee;
Employee salesManager = {
"A12345678",
"Test"
};
/* OR */
Employee salesManager = {
.id = "A12345678",
.name = "Test"
};
由于您询问有关C 而不是C,因此使用std::string
而不是原始字符数组可能更好。std::string
更加灵活:您可以将值(包括字符串文字)分配给std::string
对象。
我认为您应该在两种情况下都使用字符串,然后使用OOP代替Typedef。但是尝试此代码波纹管,应该正常工作:
#include <iostream>
using namespace std;
typedef struct {
string id;
string name;
} Employee;
int main() {
Employee salesManager;
salesManager.id = "A12345678";
salesManager.name = "Test";
cout << "Id: " << salesManager.id << endl;
cout << "Name: " << salesManager.name << endl;
return 0;
}
您无法分配给char
的数组考虑这一行:
salesManager.id="ID02093";
您可以用字符串文字来初始化 char
的数组,以便于从C继承的语法C 允许的语法。但是,您不允许使用带有数组的分配。这就是为什么您遇到此错误的原因:
incompatible types in assignment of ‘const char [8]’ to ‘char [9]’ salesManager.id="ID02093";
相反,您必须将数据复制到数组中。
您无法分配给string
的数组考虑这一行
salesManager.name="Joe";
失败的原因是因为您已将name
称为数组。
typedef struct { char id[10]; string name[20]; }Employee;
这解释了为什么您遇到此错误:
incompatible types in assignment of ‘const char [4]’ to ‘std::__cxx11::string [20] {aka std::__cxx11::basic_string [20]}’ salesManager.name="Joe";
您可能并不意味着将name
声明为数组。
避免使用匿名类
给出匿名类类型的typedef
名称与类名称的语义略有不同。由于差异很棘手,因此最好避免使用匿名类,如果该类不包含在类本身中。
- C++结构到字符串
- 从字符串中获取结构的大小
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 如何解析表示树状数据结构的字符串
- 如何将字符串与结构(也包括字符串)进行比较?
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 在向量 C++14(无限制联合)的结构内的联合中创建和存储字符串
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 将字符串存储在 constexpr 结构中
- 为什么我的结构在包含字符串时崩溃?
- 如何将字符串字符与结构数组进行比较?
- 无法使用 strcpy 将字符串复制到静态结构成员
- c++ 将函数参数(带有模板变量的结构)转换为函数体内的字符串
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 具有字符串成员的结构的动态数组
- 如何将文本文件保存到C 中的字符串结构
- C++ 斯特劳斯特鲁普的"std_lib_facilities.h"字符串结构 – 警告:无符号表达式的比较
- C++:字符串结构相等
- 返回字符串结构是否安全