使用指针的 strcpy 函数不起作用
strcopy function using pointers not working
我需要制作一个接收两个 char 指针并将一个的内容复制到另一个的函数,然后 returns 指针的开头。我已经弄乱了几个小时,并且阅读了 100 个完全不同的例子。这是我现在拥有的:
char * mystrcpy(char * dest, char * src) {
while(1) {
if(*src == '[=10=]') {
*dest = '[=10=]';
return dest;
}
else {
*dest = *src;
*src++;
*dest++;
}
}
你想要的是增加指针,而你实际上增加了它们指向的字符。
改变
*src++;
*dest++;
至:
src++;
dest++;
dest++;
dest
是一个指针,您移动它是为了从 src
复制值
所以当你 return dest
它已经指向字符串的结尾。
所以不要移动这个指针,只需使用索引将值复制到它即可。
int i=0;
while( *src)
{
dest[i] = *src;
i++;
src++;
}
dest[i] = '[=11=]';
return dest;
因此,即使您将 *dest++
修改为 dest++
,您 return 也不会给出预期的结果。
这两行:
*src++;
*dest++;
应该是:
src++;
dest++;
注意没有取消引用指针,因为代码需要递增指针,而不是指针指向的内容。
并且最好保存dest的初始值,这样可以返回。为了避免丢失 dest 缓冲区中已有的任何字符串,我怀疑 dest 的值(保存后)需要增加 dest += strlen(dest);
所以两个字符串会集中在一起,而不是覆盖 dest 中的初始字符串。
在调用该函数之前,应该检查目标缓冲区是否足够长以容纳两个字符串的 strlen() +1。
+1 允许终止字节。
我需要制作一个接收两个 char 指针并将一个的内容复制到另一个的函数,然后 returns 指针的开头。我已经弄乱了几个小时,并且阅读了 100 个完全不同的例子。这是我现在拥有的:
char * mystrcpy(char * dest, char * src) {
while(1) {
if(*src == '[=10=]') {
*dest = '[=10=]';
return dest;
}
else {
*dest = *src;
*src++;
*dest++;
}
}
你想要的是增加指针,而你实际上增加了它们指向的字符。
改变
*src++;
*dest++;
至:
src++;
dest++;
dest++;
dest
是一个指针,您移动它是为了从 src
复制值
所以当你 return dest
它已经指向字符串的结尾。
所以不要移动这个指针,只需使用索引将值复制到它即可。
int i=0;
while( *src)
{
dest[i] = *src;
i++;
src++;
}
dest[i] = '[=11=]';
return dest;
因此,即使您将 *dest++
修改为 dest++
,您 return 也不会给出预期的结果。
这两行:
*src++;
*dest++;
应该是:
src++;
dest++;
注意没有取消引用指针,因为代码需要递增指针,而不是指针指向的内容。
并且最好保存dest的初始值,这样可以返回。为了避免丢失 dest 缓冲区中已有的任何字符串,我怀疑 dest 的值(保存后)需要增加 dest += strlen(dest);
所以两个字符串会集中在一起,而不是覆盖 dest 中的初始字符串。
在调用该函数之前,应该检查目标缓冲区是否足够长以容纳两个字符串的 strlen() +1。
+1 允许终止字节。