在c++中使用char和char[]

Using char and char[] in C++

本文关键字:char c++      更新时间:2023-10-16

我在使用类型char时遇到了麻烦。当我初始化我的IDName在我的结构通过构造函数,为什么我得到这个错误信息?"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结构的末尾缺少分号,这将导致一些有趣的编译错误:-)

不能更改IDName的值,因为它是数组,而不是指针。

将其声明为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;
    {
    }
};