在c++中使用char和char[]
Using char and char[] in C++
我在使用类型char
时遇到了麻烦。当我初始化我的ID
和Name
在我的结构通过构造函数,为什么我得到这个错误信息?"expression must be a modifiable lvalue"
.
struct Staff
{
char ID[8];
char Name[30];
Staff()
{
ID = "";
Name = "";
}
};
由于这个问题被标记为c++,并且代码只使用了c++的特性(例如构造函数),我将假设您在标题中错误地将C与c++混淆了
当你真正指的是字符串时,不要使用char
数组。使用std::string
代替:
struct Staff {
std::string ID;
std::string Name;
};
通过这种方式,默认构造函数将按照预期的方式运行,甚至不需要指定它。唯一需要的额外行是包含必要的标题的行:
#include <string>
char
在C和c++中只是另一种数字类型,像int
一样,但更小(通常为一个字节)。字符数组并不特殊——它基本上是一块原始内存。字符串字面值在内部也是一个字符数组,但是c++没有内置支持用operator=
复制数组——你必须自己复制字节,例如通过(已弃用的)strcpy
C函数(包括cstring
)。
在c++中,处理字符串的常用方法是使用std::string
(包括string
),这是一个为你包装字符串字节的类,并以一种干净、直观的方式实现字符串复制、比较等。
您还在Staff
结构的末尾缺少分号,这将导致一些有趣的编译错误:-)
不能更改ID
或Name
的值,因为它是数组,而不是指针。
将其声明为char指针(在本例中最好声明为const char*
):
const char *ID;
const char *Name;
或者使用memset
:
memset(ID, ' ', sizeof(ID));
memset(Name, ' ', sizeof(Name));
这将"初始化"你的char
数组。
也可以使用strncpy
strncpy(Name, "John Doe", sizeof(Name)-1);
-1表示以空结尾的字符
你需要做的是
struct Staff
{
char ID[8];
char Name[30];
Staff() :
ID{0}, // Null terminate the array same as, ID[0] = 0;
Name{0} // Null terminate the array same as, Name[0] = 0;
{
}
};