[英]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.