活动数据复制
Active data copying
这个表达式正确吗?
{
char a;
char *temp;
for(int j = 0; j < len; j++)
{
strcpy(&temp[j], (char*)a);
}
}
代码中的 a
通过用户输入/按键在外部更新。我想将所有传入/更新的a
作为一个完整的字符串复制到temp
。
由于' a
'在您的示例中不是空终止,您想在字符串缓冲区中分配单个字符,您可以这样做:
int const buffer_size = 5;
char a = 'c';
char *temp = new char[buffer_size]; // Remember to allocate your string buffer
temp[index] = a;
// .....
delete[] temp; // free buffer.
index
是一个int
,你可以使用它来跟踪缓冲区中的下一个位置
没有,原因如下:
-
temp
没有初始化,它指向一些随机的位置,并且没有为它分配任何内存,所以你只是要在内存的随机部分上写(和/或崩溃)。 -
a
是单个char
,您使用strcpy
将其值视为字符串(char*
)(我假设您的意思是(char*)&a
,这仍然是错误的)。 -
strcpy
继续从源(a
)复制char
s到目标,直到它在源中遇到' '
…这可能是任何地方,因为a
是不是NUL终止字符串,而是char
. 。
如果您想将单个char
写入/追加到字符串/缓冲区,您只需执行buffer[position] = character
,其中buffer
是char[]
或char*
,指向分配的内存块,position
是您想要粘贴char
的缓冲区中的位置,而character
显然是char
。
无论如何,我不知道你想要做什么,也不知道你为什么要这样做背后的逻辑。
EDIT:并且您还将此标记为c++,如果您实际上使用c++,为什么不使用std::string
和std::cin
?
你的代码在很多方面都是错误的:
-
不能将char转换为char*。你必须这样做:
(char *)&a;
,因为a
是一个字符,你不需要强制转换它。 -
你不需要
strcpy
它。你可以这样做:temp[j] = a;
-
char *temp
没有关联内存分配。所以你需要这样做:char *temp = malloc(sizeof(char) * len);
完整代码:
{
char a = myFunToGetInput();
char *temp = malloc(sizeof(char) * len));
for(int j = 0; j < len; j++) {
temp[j] = a;
}
}
或者如果您以前使用过memset:
{
char a = myFunToGetInput();
char *temp = malloc(sizeof(char) * len));
memset(temp, (unsigned char)a, len);
}
相关文章:
- 在 C++ AMP 数组中复制数据多少次?
- 字符串是否在其构造函数中复制数据
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- C++ 在节点内存储对数据对象的引用,而不复制数据
- 是否可以在不分配内存或复制数据的情况下构造对象?
- 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?
- C 2D char阵列有时会在随机位置复制数据
- 在不复制数据的情况下更改 opencv mat 中的列顺序
- 有没有办法将 EGL 绘制到 /dev/fb1 而不是 /dev/fb0,而无需在树莓派上复制数据
- 使用C 和目标C从原始图像中复制数据
- 给定 myvector.start() 和 myvector.end(),我想在不复制数据的情况下创建 myvector
- 复制数据时出现奇怪错误
- 如何在 C/C++ 中从数组末尾开始复制数据
- glTexImage2D 复制数据或仅指定数据
- 如何在C++中从void指针复制数据
- 在不复制数据的情况下将OpenCV Mat发送到MATLAB工作区的方法
- 如何使用 GPU-DMA 从 GPU-CUDA 代码来复制数据
- 在矢量到矢量中复制数据<float> <Mat> (Opencv/C++)