0

几个小时以来,我一直在拆解我的程序,试图找到该程序。我终于将它限制在几行代码中,但我仍然很愚蠢(或厌倦)找到问题。

它只是一个使用指针的字符串复制函数。有人可以看一下吗?

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

它将垃圾值注入到我的字符串中,就像我以某种方式超出了字符串的限制。

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

我会使用 strcpy ,但这是一个班级的作业,这是不允许的。

编辑:我只是忘记将最终的空字符输入到目的地!抱歉给大家添麻烦了,伙计们!

4

3 回答 3

4

最简单的strcpyX()功能:

void strcpyX(char *dest, const char *src){
   while(*src) *dest++ = *src++;
   *dest = '\0';
}

请记住,这只有在您为目的地保留足够的空间时才有效。

您的目的地也必须由 a '\0'(现在不在您的代码中)终止,才能正确打印!

于 2013-02-15T04:54:02.960 回答
3

You are failing to copy the terminating nul character. You can fix this with a

*destPtr = 0;

at the ed of your function.

To my eye, however, the following is the simplest strcpy-style function. If I recall correctly, this version appeared in K&R.

void stringCopy(char *sourcePtr, char *destPtr) {
    while(*destPtr++ = *sourcePtr++)
        ;
}

This will copy the entire string, stopping only after it has copied the terminating nul.

于 2013-02-15T05:30:13.657 回答
0

Only problem in your code is your are not copying '\0' to destination. Below code works perfectly

/* strcpy: copy t to s */
void strcpy(char *s, char *t)
{
    while ((*s = *t)!=‘\0’) {
         s++;
         t++;
    }
}
于 2013-02-15T05:02:04.387 回答