如何多次更改全局变量

How to change a global variable multiple times

本文关键字:全局变量 何多次      更新时间:2023-10-16

我在.h文件中声明了一个全局变量:

extern char Title[10];

当我在.cpp文件中使用它时:

char Title[10] = "Asia";

更多代码:

Title[10] = "Europe";

第二个分配导致错误error: invalid conversion from 'const char*' to 'char' global variable

如何重新分配此全局变量?

问题:

extern char Title[10];

声明一个大小为10的char数组。

While:

Title[10] = "Europe";

尝试将CCD_ 3的第11个元素设置为CCD_。

显然不是你想要的。。。

C型解决方案:

使用strcpychar阵列"Europe"复制到Title中。这里有一些关于strcpy的方便参考。

你把它传给目的地和来源,所以在你的情况下,它会是:

strcpy(Title, "Europe");

C++路由:

使用字符串类,如std::string。这里有一些关于std::string 的方便参考

extern std::string Title;

std::string Title("Asia");
Title = "Europe";

在char Title[10]="Asia"行中,您正在将数组初始化为这些值。在您将其设置为Europe的行中,您试图将字符数组的第十个字节设置为指向常量字符串的指针。您应该使用strncpy或类似的技术来复制到字符串中。

例如strncpy(标题,"欧洲",10);

这是一个声明;它声明了一个名为Title的数组,该数组属于char类型,包含10个元素:

char Title[10] = "Asia";

然而,这是一个赋值语句。它试图(错误地)将字符串分配给Title:的第11个元素

Title[10] = "Europe";

不能将字符串分配给charTitle[10]就是这样。您要做的是将新字符串复制到Title,最简单的方法是使用strcpy函数。像这样:

strcpy(Title, "Europe");
error: invalid conversion from 'const char*' to 'char' global variable

是由于试图将字符串分配给单个字符而导致的。除此之外,您还需要调用未定义的行为。

extern char Title[10]; // array of 10 char, indexed as 0, 1, ..., 9

这是申报单,好的。

char Title[10] = "Asia";

这是初始化,好的。

Title[10] = "Europe";  // 10 means accessing array out of bound

访问数组越界。这是未定义的行为。


C++标准n3337§5.2.1/1

后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式的类型应为"指向T的指针"和另一个应具有无范围枚举或积分型。结果是类型为"T"的左值。类型"T"应是完全定义的对象类型。62表达式E1[E2]是(根据定义)与*(((E1)+(E2))相同[注:见5.3和5.7*和+的详细信息以及8.3.4的数组详细信息。——尾注]

然后,§5.7/5解释了ptr + i指向的内容:

(…)如果指针操作数和结果都指向相同的数组对象,或数组最后一个元素之后的对象对象,评估不应产生溢出;否则行为未定义。