这个表达式正确吗?
{
char a;
char *temp;
for(int j = 0; j < len; j++)
{
strcpy(&temp[j], (char*)a);
}
}在这段代码中,a通过用户输入/击键在外部进行更新。我想将所有传入/更新的a作为一个完整的字符串复制到temp中。
发布于 2011-11-08 12:14:22
由于您的示例中的'a‘不是以null结尾的,并且您希望在字符串缓冲区中分配单个字符,因此您可以这样做:
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,你可以用它来跟踪缓冲区中的下一个位置。
发布于 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::string和std::cin呢?
发布于 2011-11-08 12:07:38
你的代码在很多方面都是错误的:
(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);
}https://stackoverflow.com/questions/8045794
复制相似问题