C语言打印hasSign变量时无法输出换行符的原因及解决方法
问题成因
问题出在printf("%s", hasSign + "\n");这行代码的逻辑错误:
"\n"是C语言中的字符串常量,本质是指向换行符存储地址的char*指针- 把int类型的
hasSign和指针直接相加是指针偏移操作:hasSign为0时,表达式结果就是"\n"的首地址,只会输出换行;hasSign为1时,指针往后偏移1字节,刚好指向字符串末尾的结束符\0,用%s打印这个地址时什么内容都不会输出,自然没有换行 - 额外的错误点:
%s是字符串格式符,不能用来输出int类型的hasSign变量,要输出整数需要用%d格式符
修复方案
直接替换错误的printf行为如下代码即可:
printf("%d\n", hasSign);
该写法用%d匹配int类型的hasSign变量输出数值,同时把换行符直接写在格式串末尾,输出数值后自动完成换行。
额外优化提示:原有代码中的scanf("%s", str)存在缓冲区溢出风险,建议修改为scanf("%49s", str)限制输入长度,避免输入过长字符串导致数组越界
内容的提问来源于stack exchange,提问作者Jbb
相关产品推荐
相关产品推荐

