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

时间:2014-03-17 16:47:30

标签: c++ char

我在使用char类型时遇到问题。当我通过构造函数初始化我的结构中的IDName时,为什么我会收到此错误消息? "expression must be a modifiable lvalue"

struct Staff
{
    char ID[8];
    char Name[30];
    Staff()
    {
        ID = "";
        Name = "";
    }
};

4 个答案:

答案 0 :(得分:6)

由于这个问题被标记为C ++,并且代码仅使用了C ++的特性(例如构造函数),所以我假设您在标题中错误地将C与C ++混淆。

当你真的指字符串时,不要使用char数组。请改用std::string

struct Staff {
    std::string ID;
    std::string Name;
};

通过这种方式,默认构造函数将按预期运行,您甚至不需要指定它。您需要的唯一附加行是包含必要标题的行:

#include <string>

位于文件的最顶部。

答案 1 :(得分:4)

C和C ++中的

char只是另一种数字类型,如int,但更小(通常是一个字节)。一系列字符并不特别 - 它基本上是一大堆内存。字符串文字在内部也是字符数组,但C ++没有内置支持复制operator=的数组 - 你必须自己复制字节,例如通过(不推荐的){{1} C函数(包括strcpy)。

在C ++中,处理字符串的常用方法是使用cstring(include std::string),这是一个为你包装字符串字节的类,并实现字符串复制,比较等。以干净,直观的方式。

你在string结构的末尾也缺少一个分号,这会导致一些有趣的编译错误: - )

答案 2 :(得分:2)

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

将其声明为char指针(在这种情况下,最好将其声明为const char*):

const char *ID;
const char *Name;

或使用memset

memset(ID, '\0', sizeof(ID));
memset(Name, '\0', sizeof(Name));

这将&#34;初始化&#34;你的char数组。

您可以使用strncpy

为字符串分配字符串
strncpy(Name, "John Doe", sizeof(Name)-1);

-1表示空终止字符。

答案 3 :(得分: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;
    {
    }
};