C语言二维数组行计算函数传入的行参数始终为0问题求助
问题原因
核心问题出在main函数中读取操作类型字符的scanf语句格式符使用错误:
- 你定义的
sm是单字符char类型,但使用了%s格式符进行读取。%s是字符串读取格式符,读取完成后会自动在目标地址后追加一个字符串结束符\0,造成内存越界。 - 由于栈空间上局部变量是连续分配的,
sm变量后续的内存空间刚好是int类型变量l的存储地址,追加的\0会覆盖l的低字节数据,最终表现为l的值被修改为0。
解决方法
将读取操作类型的scanf语句做两处修正即可:
- 格式符从
%s改为%c,适配单字符读取的需求 - 在
%c前加一个空格,跳过之前读取行号后残留在输入缓冲区的换行符,避免读取到空的换行字符
修正后的对应代码段如下:
// 原错误代码 // scanf("%s", &sm); // 修正后代码 scanf(" %c", &sm);
额外优化建议
- 可以增加行号合法性校验,判断读取到的
l是否在[0, LINHA-1]范围内,避免出现数组越界访问的问题 - 可以增加操作类型判断的兜底分支,当输入的字符不是
S/M时给出对应提示,提升程序容错性
内容的提问来源于stack exchange,提问作者Lonrukas
相关产品推荐
相关产品推荐

