2013-02-15 84 views
0

我一直在拆分我的程序几个小时试图找到该程序。我终于将它限制在几行代码中,但仍然很愚蠢(或厌倦)以找到问题。这个带指针功能的strcpy有什么问题?

它全部是使用指针的字符串复制函数。有人可以看看它吗?

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

它注入垃圾值代入我的琴弦,就像我莫名其妙地走出去串的限制。

此外,它只是用来复制长度小于10。声明源和目的数组大小的串20的一切是硬编码的。

我会用strcpy的,但是这是一个类的分配,这是不允许的。

编辑:我只是忘了输入最终的空字符到目的地!对不起,所有的麻烦,家伙!

+0

你确定sourcePtr有足够的空间存储所有destPtr吗? – monoxygen 2013-02-15 04:52:31

+3

为什么不使用strcpy? – monoxygen 2013-02-15 04:53:07

+0

如果可能,请使用调试器来观察变量。 – NeonGlow 2013-02-15 04:57:10

回答

4

简单strcpyX()功能:

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

请记住,这只会工作,你保留足够的空间为目标。

你的目的地也必须由'\0'被终止(这是不是在你的代码现在)才能正常打印!

0

在你的代码唯一的问题是你没有抄袭'\0'到目的地。以下代码完美地起作用

/* strcpy: copy t to s */ 
void strcpy(char *s, char *t) 
{ 
    while ((*s = *t)!=‘\0’) { 
     s++; 
     t++; 
    } 
} 
3

您无法复制终止nul字符。你可以在你的函数的ed下修复这个问题。

然而,在我看来,以下是最简单的strcpy风格的函数。如果我没有记错,这 版本以K &出现R.

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

这将复制整个字符串,停止它复制终止NUL之后。

+0

这很简单,即使对于大多数程序员来说也很难理解。再加上一点扭曲不安全的十六进制使它无法抗拒。 – 2013-04-02 01:46:33