如何多次更改全局变量
How to change a global variable multiple times
我在.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型解决方案:
使用strcpy
将char
阵列"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";
不能将字符串分配给char
,Title[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
指向的内容:
(…)如果指针操作数和结果都指向相同的数组对象,或数组最后一个元素之后的对象对象,评估不应产生溢出;否则行为未定义。
- 全局变量 多读取器 一个写入器多线程安全?
- 跨多个类的全局变量而不会出现重定义错误?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 对全局变量的多线程访问:我应该使用互斥锁吗?
- cuda:多个线程访问同一个全局变量
- 在不同循环中多次声明变量的优点
- 将变量定义为静态时,为什么可以多次定义它
- 如何解决多次继承的不明确变量名称?
- 静态变量可以多次初始化吗?
- 在主循环外部多个文件上定义全局变量
- 如何创建用于多个源文件的全局变量/包含/函数
- 如何基于模板变量参数多次扩展语句
- 在一个语句中对原子布尔变量进行多次赋值
- DLL 中具有多个类和全局变量的多个 DLL
- 包含文件会导致全局变量出现多个定义错误
- 我可以使用一个变量来多次搜索std::string,而不是使用不同的size_t变量吗?
- Gcc /g++和全局变量的多个定义
- 使用局部变量或多次访问结构体值(c++)
- 如何多次更改全局变量
- visual studio 2012 - c++全局变量在多个文件