C++将数据读入字符*
C++ reading data into a char*
我正在尝试使用以下代码将数据读入字符*:
void MyGameMain::MakeNewTileMap() {
char* data[] = { GetLevelFromFile() };
//failing at x = 0 y = 4
// Set up the tiles
for (int x = 0; x < 24; x++) {
for (int y = 0; y < 26; y++) {
m_oTiles.SetValue(x, y, data[y][x] - 'a');
}
}
//display level in prompt
for (int y = 0; y < 26; y++) {
for (int x = 0; x < 24; x++)
printf("%d ", m_oTiles.GetValue(x, y));
printf("n");
}
}
函数 GetLevelFromFile() 如下所示:
char* MyGameMain::GetLevelFromFile() {
return
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaabbbbbbbbbbbbaaaaaa",
"aaaaaaeeeeeeeeeeeeaaaaaa",
"aaaaaabbbbbbbbebbbaaaaaa",
"aaadddbbbbbbbbbbbbcccaaa",
"aaadddbbbbbbbbbbbbcccaaa",
"aaaaaabbbebbbbbbbbaaaaaa",
"aaaaaabbbbbbbbbbbbaaaaaa",
"aaaaaabbbbbbbbbbbbaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa";
}
当我运行此代码时,我收到一个错误,这实质上意味着我正在尝试读取不存在的数据,在第一个嵌套的 for 循环的第二个点,当x = 0
和y = 4
时。
谁能解释为什么会发生这种情况,问题是什么?
最终的计划是让GetLevelFromFile()
从文件中读取字符串,以便我可以将级别数据存储在单独的文件中。
感谢您的帮助!
你返回的实际上是一个字符串:在这种情况下,逗号运算符将只返回最后一个"aaaaaa..."元素。要实现您想要的(字符串数组),您至少应该将卷曲放在数组周围。(我认为这种方法无论如何都是一个虚拟方法,因为以这种方式返回字符串的硬编码数组可能是一个有问题的想法:)
char** MyGameMain::GetLevelFromFile() {
return {
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
....
"aaaaaaaaaaaaaaaaaaaaaaaa"
};
}
更新:返回类型应该是指针到字符数组(或指针到指针到字符),以便char* data[]
正确接受它。
后来的更新:实际上我宁愿有一个虚拟数组作为静态类成员(如果它应该是冻结值,则标记为 const):
class MyGameMain {
public:
void MakeNewTileMap();
const char** GetLevelFromFile() const;
static const char* level[];
};
const char* MyGameMain::level[] = {
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaa"
};
const char** MyGameMain::GetLevelFromFile() const {
return level;
}
void MyGameMain::MakeNewTileMap() {
const char** data = GetLevelFromFile();
...
问题是您对"string","string","string",etc
的声明没有声明char *
数组。您正在使用逗号运算符,这意味着返回的字符串实际上是"AAAA...AA" - 只有 26 个字节长,因此您最终会超出范围引用内存。删除逗号,它应该可以根据需要工作,因为预处理器会将所有字符串行连接成 1 个长字符串。
struct levelbase {
int x, y;
unsigned char operator[](_x, _y) {return (unsigned char*)(this+1)+_y*x+_x;};
};
template<int x, int y> struct level : levelbase {
unsigned char data[x][y];
};
不过,最好返回一个常量指针指向上面的内容。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何获取C++字符数据类型的地址
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 在 std::vector<无符号字符中存储任意数据的方法>
- 在C++事务之间存储大量字符数据的有效方法
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 将空格作为单字符数据类型的输入?
- C++ - 使用结构数据类型将单词中的单个小写字符更改为大写,反之亦然
- 在结构数据类型中更改每个字符的 ASCII 值
- 在结构之间复制字符数据
- 如果在输入中,我给出任何字符数据,为什么这不会抛出部分
- 如何使用 winsock (c++) 发送recv 非字符数据
- C++ 个字符数据类型的用途是什么?为什么不直接使用字符串?
- 标准::矢量<uchar>到字符* 数据丢失
- C/C++中的字符数据类型
- 如何在不复制和保留 std::string 对象的情况下获得 C++ std::string 字符数据的所有权
- 字符数据浮点数/双精度数
- 如何使用cin读取字符数据以存储在数组中并显示
- 分割错误与字符串和复制的字符数据