将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
Issue with converting char array to structure. char array variable of structure gets overflow
我想将字符数组转换为结构,但在打印时我得到以下输出
输出:测试世界(在第 1 行中( st 世界(第 2 行(
#pragma(1)
struct MyStruct
{
char a[2];
char b[5];
};
int main()
{
char test[11] = "Test World";
char *c = test;
struct MyStruct *Test = (MyStruct*)(c);
cout << Test->a << endl;
cout << Test->b;
cin.ignore();
return 0;
}
我希望根据结构变量的大小输出。 我的预期输出:Te(在第 1 行( 新禾(第2行(
你的程序有几个问题。
首先,通过不指向MyStruct
(也不兼容(对象的MyStruct
指针进行间接操作。因此,程序的行为是未定义的。
其次,字符串Te
根本不适合MyStruct::a
,因为没有足够的空间。字符串Te
包含三个字符,MyStruct::a
仅为 2。只有字符T
且e
合适,但没有空间容纳 null 终止符字符,因此它不能是以 null 结尾的字符串。同样的问题是你对适合MyStruct::b
的期望。
也许您的意图是没有以 null 结尾的字符串,但您的问题是您将非 null 终止的字符数组插入到标准流std::cout
中,这要求参数是以 null 结尾的字符串。由于违反此要求,程序的行为将未定义。
下面是一个可能的代码片段,它将具有明确定义的行为并具有所需的输出:
MyStruct Test;
std::memcpy(&Test, test, sizeof Test);
for(char c : Test.a)
std::cout << c;
std::cout << 'n';
for(char c : Test.b)
std::cout << c;
C strin 为零端接。因此,您需要在结构的字段中添加终止零。https://godbolt.org/z/kfsioP
struct MyStruct
{
char a[2];
char b[5];
};
int main()
{
char test[11] = "Test World";
char *c = test;
struct MyStruct *Test = (MyStruct*)(c);
Test -> a[sizeof(Test -> a) - 1] = 0;
Test -> b[sizeof(Test -> b) - 1] = 0;
std::cout << Test->a << std::endl;
std::cout << Test->b;
return 0;
}
相关文章:
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组