首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主动数据复制

主动数据复制
EN

Stack Overflow用户
提问于 2011-11-08 12:01:54
回答 3查看 189关注 0票数 0

这个表达式正确吗?

代码语言:javascript
复制
{
    char a;
    char *temp;
    for(int j = 0; j < len; j++)
    {
        strcpy(&temp[j], (char*)a);
    }
}

在这段代码中,a通过用户输入/击键在外部进行更新。我想将所有传入/更新的a作为一个完整的字符串复制到temp中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-08 12:14:22

由于您的示例中的'a‘不是以null结尾的,并且您希望在字符串缓冲区中分配单个字符,因此您可以这样做:

代码语言:javascript
复制
 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,你可以用它来跟踪缓冲区中的下一个位置。

票数 1
EN

Stack Overflow用户

发布于 2011-11-08 12:07:15

不,有几个原因:

  • temp没有初始化,它指向某个随机位置,并且没有为它分配任何内存。因此,您只需覆盖内存的随机部分(和/或crash).
  • a是单个char,并且您正在使用strcpy将其值视为字符串(char*) (我假设您的意思是仍然是wrong).
  • strcpy(char*)&a )继续将char从源(a)复制到目标,直到它命中'\0'在source...which中的任何位置,因为a而不是一个以NUL结尾的char.

字符串

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

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

EDIT:还有一个标记为C++的代码,如果你使用的是C++,为什么不使用std::stringstd::cin呢?

票数 0
EN

Stack Overflow用户

发布于 2011-11-08 12:07:38

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

  1. 不能将char转换为char*。你必须这样做:(char *)&a;,因为a是一个字符,所以你根本不需要转换它,
  2. ,你不需要strcpy它。你可以这样做:temp[j] = a;
  3. char *temp没有分配给它相关的内存。所以你需要这样做:char *temp = malloc(sizeof(char) * len);

请在此处完成代码:

代码语言:javascript
复制
{
 char a = myFunToGetInput();
 char *temp = malloc(sizeof(char) * len));
 for(int j = 0; j < len; j++) {
   temp[j] = a;
 }
}

或者,如果您以前使用过memset:

代码语言:javascript
复制
{
 char a = myFunToGetInput();
 char *temp = malloc(sizeof(char) * len));
 memset(temp, (unsigned char)a, len);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8045794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档