linux中复制字符串出错,Strcpy()会破坏Solaris中复制的字符串,但不会损坏Linux

这条线:

cond = (char *)malloc(sizeof(char));

只分配一个char用于存储,然后在其中复制多个 – strcpy需要至少放置null终止符,但在你的情况下,也是你的strtok的结果.

它可能在不同的系统上工作的原因是malloc的某些实现将以某个分辨率(例如,16个字节的倍数)分配,无论您要求的是什么实际值,因此最后可能有一些空闲空间你的缓冲区.但你正在尝试的仍然是非常不明确的行为.

未定义的行为可能有效的事实有时绝不会消除您避免此类行为的责任.

分配足够的空间来存储你的strtok的结果,你应该没问题.

最安全的方法是动态分配空间,使其至少与传递给strtok的字符串一样大.这样就不会有溢出的可能性(除了奇怪的边缘情况,其他线程可能会修改你背后的数据但是,如果是这种情况,strtok无论如何都是一个非常糟糕的选择).

类似的东西(如果instr是你的原始输入字符串):

cond = (char*)malloc(strlen(instr)+1);

这保证了从instr中提取的任何标记都适合cond.

另外,根据定义,sizeof(char)总是1,因此您不需要乘以它.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值