我在.h文件中声明了一个全局变量:
extern char Title[10];
当我在.cpp文件中使用它时:
char Title[10] = "Asia";
更多代码:
Title[10] = "Europe";
此第二项作业导致错误error: invalid conversion from 'const char*' to 'char' global variable
如何重新分配此全局变量?
答案 0 :(得分:2)
问题:
extern char Title[10];
声明一个大小为10的char
数组。
虽然:
Title[10] = "Europe";
尝试将Title
的第11个元素设置为"Europe"
。
显然不是你想要的......
C风格解决方案:
使用strcpy
将char
数组“Europe”复制到Title
。 Here'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
指向的内容:
(...)如果指针操作数和结果都指向元素 相同的数组对象,或者超过数组最后一个元素的数组 对象,评估不得产生溢出;否则, 行为未定义。