活动数据复制

时间:2011-11-08 04:01:54

标签: c++

这个表达是否正确?

{
    char a;
    char *temp;
    for(int j = 0; j < len; j++)
    {
        strcpy(&temp[j], (char*)a);
    }
}
此代码中的

a通过用户输入/键击进行外部更新。我想将所有传入/更新的a复制到temp作为整个字符串。

3 个答案:

答案 0 :(得分:1)

由于示例中的“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.

indexint,您可以使用它来跟踪缓冲区中的下一个位置。

答案 1 :(得分:0)

否,原因如下:

  • temp未初始化,它指向一些随机位置并且没有为其分配任何内存,所以你只是要写一个随机的内存部分(和/或崩溃) )。
  • a是一个char,您使用char*将其值视为字符串(strcpy)(我假设您的意思是(char*)&a这仍然是错误的。)
  • strcpy继续将char从源(a)复制到目标,直到它到达源中的'\0' ...这可能是a以来{ {1}} 不是NUL终止字符串,而是char

如果您想要将单个char写入/附加到字符串/缓冲区,您只需执行buffer[position] = character,其中bufferchar[]或{{1}指向已分配内存的块,char*是您想要粘贴position的缓冲区中的位置,而char显然是{{1} }}

无论如何,我不知道你要做的是什么,或者你为什么要尝试做你想做的任何事情背后的逻辑。

编辑:此外,您还标记为C ++,如果您实际使用的是C ++,为什么不使用characterchar

答案 2 :(得分:0)

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

  1. 您无法将char转换为char *。 您必须执行以下操作:(char *)&a;并且由于a是char,因此您根本不需要将其强制转换。

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

  3. char *temp未分配与之关联的内存。所以你需要做这样的事情:char *temp = malloc(sizeof(char) * len);

  4. 此处填写完整代码:

    {
     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);
    }