C++ 在char*vector中存储不同的值,数组中的所有位置都具有相同的值
让我解释一下我的问题 首先,假设我随机生成了数字5 我想把这个整数转换成一个字符*,这样我就可以用我的 绘制字符串方法 我想让5作为中心位置,在一个 字符*数组[2] 在位置[0]中,我需要较低的相邻数字4 在位置[2]中,我需要较高的相邻数字6 所以 [0]=4 [1] = 5 [2] =6 然后我想显示向量位置的内容,如下所示C++ 在char*vector中存储不同的值,数组中的所有位置都具有相同的值,c++,arrays,C++,Arrays,让我解释一下我的问题 首先,假设我随机生成了数字5 我想把这个整数转换成一个字符*,这样我就可以用我的 绘制字符串方法 我想让5作为中心位置,在一个 字符*数组[2] 在位置[0]中,我需要较低的相邻数字4 在位置[2]中,我需要较高的相邻数字6 所以 [0]=4 [1] = 5 [2] =6 然后我想显示向量位置的内容,如下所示 4 5 6 但是,我的输出更像这样: 5 5 5 无论我生成什么数字,也不管我执行什么操作,我只会在所有向量位置得到数字5 代码 如果有人能帮忙,我会很感激的 不
4
5
6
但是,我的输出更像这样:
5
5
5
无论我生成什么数字,也不管我执行什么操作,我只会在所有向量位置得到数字5
代码
如果有人能帮忙,我会很感激的
不要让我去掉char*您的代码有未定义的行为:它从conver字符串内部获取指向内部字符串缓冲区的指针 但下次重新分配convert字符串时,缓冲区可能会变得无效。您看到的行为表明缓冲区得到重用,而不是重新分配,因此相同的指针存储在块向量中 最好的解决方案是直接存储std::string,因为它可以为您管理复制和取消分配:
std::vector<std::string> blocks;
...
blocks.push_back(std::to_string(startpoint));
现在,为了避免内存泄漏,您需要在完成时对块的每个元素调用delete[],如果需要使用char*而不是std::string,则需要分配它并复制字符串的内容intead或复制指针 而不是:
char *converted = &convert[0u];
使用:
现在,无论转换发生什么情况,您都可以控制转换后的数据。当你不需要的时候也要小心删除它
否则,当转换更改时,转换后的数据可能会更改或指向无效数据。
这是因为在原始实现中,converted指向由convert对象管理的数据。尝试使用string。要正确使用char*要困难得多,而且通常是浪费时间。我需要使用char*。我打赌你不需要。您可以在需要时转换为输出。这就是我所做的。代码是转换过程。或者你是在建议我先得到字符向量,然后再转换?@JohnnyMccrum是否有你不理解的特定部分或术语?然后我将字符串推到字符串数组的后面,我仍然需要将其转换为字符*作为输出方法,这是一开始的全部问题。@JohnnyMccrum为什么?只需在对象上调用c_str,就可以得到const char*,它保证在字符串被更改或删除之前一直保持不变。但是,请确保代码接受const char*,以确保它没有试图修改字符串的内容。但是,它是一个常量,需要更改。它不接受const char *jnnccCurm,为什么拖拽字符串需要改变传入的内容?对于StrucPy的第二个参数,您使用什么?为什么在C++中使用MaloC而不是NeX[]?我没有IDEAE,请使用调试器,找出问题所在。
std::vector<std::string> blocks;
...
blocks.push_back(std::to_string(startpoint));
char *copy = new char[strlen(converted)+1];
strcpy(copy, converted);
blocks.push_back(copy);
char *converted = &convert[0u];
char *converted = malloc(convert.length() + 1); // number + '\0'
// can also use char *converted = new char[convert.length() + 1];
strcpy(converted, convert.c_str())