我一直试图将我的程序分开几个小时试图找到该程序。我最后将它限制在几行代码中,但我仍然觉得这个问题很愚蠢(或者很累)。
所有这都是使用指针的字符串复制功能。有人可以看一下吗?
void stringCopy(char *sourcePtr, char *destPtr)
{
while(*sourcePtr!='\0')
{
*destPtr=*sourcePtr;
destPtr++;
sourcePtr++;
}
}
它将垃圾值注入我的字符串中,就像我不知何故超出了字符串的限制。
此外,它仅用于复制长度小于10的字符串。声明的源和目标数组大小为20.所有内容都是硬编码的。
我会使用strcpy,但这是一个类的赋值,不允许这样做。
编辑:我只是忘了将最终的空字符输入到目的地!对不起,伙计们!答案 0 :(得分:4)
最简单的strcpyX()
功能:
void strcpyX(char *dest, const char *src){
while(*src) *dest++ = *src++;
*dest = '\0';
}
请记住,这只会为您预留足够的目的地空间。
您的目的地也必须以'\0'
(现在不在您的代码中)终止才能正确打印!
答案 1 :(得分:3)
您无法复制终止空字符。您可以使用
解决此问题*destPtr = 0;
在你的功能编辑。
然而,在我看来,以下是最简单的strcpy风格函数。如果我没记错的话,这个 版本出现在K& R。
void stringCopy(char *sourcePtr, char *destPtr) {
while(*destPtr++ = *sourcePtr++)
;
}
这将复制整个字符串,仅在复制终止字符后停止。
答案 2 :(得分:0)
您的代码中只有问题是您没有将'\0'
复制到目的地。下面的代码完美无缺
/* strcpy: copy t to s */
void strcpy(char *s, char *t)
{
while ((*s = *t)!=‘\0’) {
s++;
t++;
}
}