c++ - strcmp
迷茫
迷茫 2017-04-17 15:03:10
[C++讨论组]
char a[2] = { '1','2' };
printf("%d", strcmp(a, "12"));

结果为 1

一个没有结束符,一个有结束符,为什么没有的比有的大?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
高洛峰

char 一般被当作无符号整数,a[2]是个随机值,只有大于0 和 等于0 两种情况。

多数时候,a[2]大于'\0',返回1。

高洛峰

与之前一个问题类似——那个问题,我的答案还被吃瓜群众踩了一脚——字符串是字符串,字符数组是字符数组。strcmp 函数需要你传入的是字符串,因为只有字符串才有 \0。如果坚持用字符数组,那就需要手动给它一个 \0:

char a[] = {'1', '2', '\0'};
printf("%d", strcmp(a, "12"));

你得到的结果其实并非 1,而是一个随机值。因为 strcmp 函数并不知道 a 的长度,它对内存进行了越界访问。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号