繁体   English   中英

C ++中的strcpy无法正常工作

[英]Strcpy in c++ doesn't work

谁能说出为什么这段代码中的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;
}

尝试使用临时指针:

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

    return dest;
}

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

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

例如,数组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;
}

而不是在循环中增加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; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM