这个带指针功能的strcpy有什么问题?

时间:2013-02-15 04:50:47

标签: c++ pointers strcpy

我一直试图将我的程序分开几个小时试图找到该程序。我最后将它限制在几行代码中,但我仍然觉得这个问题很愚蠢(或者很累)。

所有这都是使用指针的字符串复制功能。有人可以看一下吗?

void stringCopy(char *sourcePtr, char *destPtr)
{
    while(*sourcePtr!='\0')
    {
        *destPtr=*sourcePtr;
        destPtr++;
        sourcePtr++;
    }
}

它将垃圾值注入我的字符串中,就像我不知何故超出了字符串的限制。

此外,它仅用于复制长度小于10的字符串。声明的源和目标数组大小为20.所有内容都是硬编码的。

我会使用strcpy,但这是一个类的赋值,不允许这样做。

编辑:我只是忘了将最终的空字符输入到目的地!对不起,伙计们!

3 个答案:

答案 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++;
    }
}