活动数据复制

Active data copying

本文关键字:复制 数据 活动      更新时间:2023-10-16

这个表达式正确吗?

{
    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,其中bufferchar[]char*,指向分配的内存块,position是您想要粘贴char的缓冲区中的位置,而character显然是char

无论如何,我不知道你想要做什么,也不知道你为什么要这样做背后的逻辑。

EDIT:并且您还将此标记为c++,如果您实际上使用c++,为什么不使用std::stringstd::cin ?

你的代码在很多方面都是错误的:

  1. 不能将char转换为char*。你必须这样做:(char *)&a;,因为a是一个字符,你不需要强制转换它。

  2. 你不需要strcpy它。你可以这样做:temp[j] = a;

  3. 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);
}