c ++中的Strcpy不起作用

时间:2015-05-23 19:32:51

标签: c++

有人可以告诉为什么这段代码中的strcpy会返回一个空字符串吗?

#include <iostream>

char* strcpy(char* dest, const char* from) {
    for ( ; *from; dest++, from++) {
        *dest = *from;
    }

    return dest;
}

int main() {
    char a[] = "aba";
    char b[] = "hello";
    std::cout << strcpy(a, b);
    return 0;
}

我使用的编译器是GNU G ++ 11 4.9.2

upd:这也不起作用     #include

char* strcpy(char* dest, const char* from) {
    for ( ; *from; dest++, from++) {
        *dest = *from;
    }

    *dest = '\0';

    return dest;
}

int main() {
    char a[] = "abaaa";
    char b[] = "hello";
    std::cout << strcpy(a, b);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

尝试使用临时指针:

char* strcpy(char* dest, const char* from) {
    char *tmp = dest;
    for ( ; *from; tmp++, from++) {
        *tmp = *from;
    }
    *tmp = '\0';

    return dest;
}

还可以考虑使用适当的字符数为dest分配内存。

答案 1 :(得分:0)

函数和程序本身无效。:)

例如,数组a无法容纳数组b中的所有字符,因为它的大小小于b的大小。 (a的大小等于4,而b的大小等于6)

char a[] = "aba";
char b[] = "hello";

所以此声明中的strcpy(a, b)调用

std::cout << strcpy(a, b);

导致未定义的行为。

对于该函数,它不会将终止零点从索引字符串复制到目标字符串。并且它不会返回指向目标字符串的第一个字符的指针,因为函数指针dest内部已更改(已增加)

正确的功能可能看起来像

char* strcpy( char* dest, const char* from ) 
{
    char *p = dest;

    while ( *p++ = *from++ );

    return dest;
}

答案 2 :(得分:0)

尝试这个:

,而不是递增dest和循环

char *StrCpy (char *dest, const char *from){

	int i=0;
	for (i=0;i<strlen(from);i++){
		*(dest+i) = *(from+i);
	}
	*(dest+(strlen(from)))='\0';
return dest;
}