如何多次更改全局变量

时间:2014-04-10 23:02:50

标签: c++

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

extern char Title[10];

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

char Title[10] = "Asia";

更多代码:

Title[10] = "Europe";

此第二项作业导致错误error: invalid conversion from 'const char*' to 'char' global variable

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

4 个答案:

答案 0 :(得分:2)

问题:

extern char Title[10];

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

虽然:

Title[10] = "Europe";

尝试将Title的第11个元素设置为"Europe"

显然不是你想要的......

C风格解决方案:

使用strcpychar数组“Europe”复制到TitleHere's some handy reference to strcpy

您将目标和来源传递给它,所以在您的情况下它将是:

strcpy(Title, "Europe");

C ++路线:

使用std::string等字符串类。 Here's some handy reference to std::string

extern std::string Title;

...

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

答案 1 :(得分:0)

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

e.g。 strncpy(标题,"欧洲",10);

答案 2 :(得分:0)

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

char Title[10] = "Asia";

然而,这是一份任务说明。它尝试(错误地)将字符串分配给Title的第11个元素:

Title[10] = "Europe";

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

strcpy(Title, "Europe");

答案 3 :(得分:0)

error: invalid conversion from 'const char*' to 'char' global variable

是由尝试将字符串分配给单个char引起的。除此之外,在开始之前调用未定义的行为。

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

  

后缀表达式后跟方括号中的表达式是a   后缀表达。其中一个表达式应具有该类型   “指向T的指针”和另一个应具有无范围的枚举或   积分型。结果是“T”型的左值。“T”型应为   是一个完全定义的对象类型.62表达式E1 [E2]是   相同(按定义)到*((E1)+(E2))[注:见5.3和5.7   有关数组细节的*和+以及8.3.4的详细信息。 - 结束说明]

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

  

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