Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在char*vector中存储不同的值,数组中的所有位置都具有相同的值_C++_Arrays - Fatal编程技术网

C++ 在char*vector中存储不同的值,数组中的所有位置都具有相同的值

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 代码 如果有人能帮忙,我会很感激的 不

让我解释一下我的问题

首先,假设我随机生成了数字5

我想把这个整数转换成一个字符*,这样我就可以用我的 绘制字符串方法

我想让5作为中心位置,在一个 字符*数组[2]

在位置[0]中,我需要较低的相邻数字4

在位置[2]中,我需要较高的相邻数字6

所以

[0]=4 [1] = 5 [2] =6

然后我想显示向量位置的内容,如下所示

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())