这个表达是否正确?
{
char a;
char *temp;
for(int j = 0; j < len; j++)
{
strcpy(&temp[j], (char*)a);
}
}
此代码中的 a
通过用户输入/键击进行外部更新。我想将所有传入/更新的a
复制到temp
作为整个字符串。
答案 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.
index
是int
,您可以使用它来跟踪缓冲区中的下一个位置。
答案 1 :(得分:0)
否,原因如下:
temp
未初始化,它指向一些随机位置并且没有为其分配任何内存,所以你只是要写一个随机的内存部分(和/或崩溃) )。a
是一个char
,您使用char*
将其值视为字符串(strcpy
)(我假设您的意思是(char*)&a
这仍然是错误的。)strcpy
继续将char
从源(a
)复制到目标,直到它到达源中的'\0'
...这可能是a
以来{ {1}} 不是NUL终止字符串,而是char
。如果您想要将单个char
写入/附加到字符串/缓冲区,您只需执行buffer[position] = character
,其中buffer
是char[]
或{{1}指向已分配内存的块,char*
是您想要粘贴position
的缓冲区中的位置,而char
显然是{{1} }}
无论如何,我不知道你要做的是什么,或者你为什么要尝试做你想做的任何事情背后的逻辑。
编辑:此外,您还标记为C ++,如果您实际使用的是C ++,为什么不使用character
和char
?
答案 2 :(得分:0)
你的代码在很多方面都是错误的:
您无法将char转换为char *。
您必须执行以下操作:(char *)&a;
并且由于a
是char,因此您根本不需要将其强制转换。
您不需要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);
}