字符串拷贝

本文探讨了使用strcpy函数时可能出现的内存越界问题,并详细解释了如何根据编译器的内存对齐原则来正确地分配字符数组大小,避免运行时错误。

 void test(char * str1)
{
 char string[1];
 strcpy(string, str1);
 cout << string << endl;
}
int main(int argc, char* argv[])
{
 test("abc");
 return 0;
}

申请的string字符数组虽然只有1个字节,但是由于编译器的内存对齐原则,他会补上到4个字节,向内存申请4个字节。这样运行上面程序,str1是'a','b','c','/0',正好4个字节,即可以编译通过,并运行。

如果str1是test("abcde"),这样str1是'a','b','c','d','e','/0',这样的话,可以通过编译,但是会产生运行期错误。我们就可以string[5]或者string[6],string[7],string[8]就都可以了

注意:如果用strcpy函数,必须是字符串,即字符数组最后一位是'/0',如果这样str1={'a','b','c','d'};strcpy(string,str1);这样是错误的,编译都不能通过。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值