C里面字符串及strcpy函数让我大跌眼镜

学了这么多年看到这种问题感觉还是跪了

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'

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值