学了这么多年看到这种问题感觉还是跪了
char s[] = "123456789";
char e[] = "123";strcpy(e,s);
cout<<e<<" "<<s<<endl;
看面试宝典,发觉自己越发simple了,上面的输出竟然是:123456789 56789
源字符串被截断了一部分。
书上说是由于连续内存分配问题,如123\0123456789\0,调用函数之后被替换为:123456789\056789\0
但是当e改为“1234”或者“12”时,程序均能够正确得出结果,瞬间就感觉不会再爱了。求高人指点
char s[] = "123456789";
char e[] = "123";cout<<e<<endl;//输出为123
char str[] = {'a','b'};
cout<<str<<endl;//输出为ab123
上面输出不一致在于栈是向低地址发展,定义字符串时使用双引号会自动加入\0结尾标识,而单个字符定义时则得自己手动加入
定义str后数据区域格式为:ab123\0123456789\0故会将str由开始地址识别至\0出现的地方即:ab123
附上拷贝函数完整写法
void stringcpy(char *to, const char* form)
{
assert(to != NULL && form != 0);
while(*form != '\0')*to++=*from++;
*to='\0'
}