You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言二维数组行计算函数传入的行参数始终为0问题求助

问题原因

核心问题出在main函数中读取操作类型字符的scanf语句格式符使用错误:

  • 你定义的sm是单字符char类型,但使用了%s格式符进行读取。%s是字符串读取格式符,读取完成后会自动在目标地址后追加一个字符串结束符\0,造成内存越界。
  • 由于栈空间上局部变量是连续分配的,sm变量后续的内存空间刚好是int类型变量l的存储地址,追加的\0会覆盖l的低字节数据,最终表现为l的值被修改为0。
解决方法

将读取操作类型的scanf语句做两处修正即可:

  1. 格式符从%s改为%c,适配单字符读取的需求
  2. 在%c前加一个空格,跳过之前读取行号后残留在输入缓冲区的换行符,避免读取到空的换行字符

修正后的对应代码段如下:

// 原错误代码
// scanf("%s", &sm);
// 修正后代码
scanf(" %c", &sm);
额外优化建议
  • 可以增加行号合法性校验,判断读取到的l是否在[0, LINHA-1]范围内,避免出现数组越界访问的问题
  • 可以增加操作类型判断的兜底分支,当输入的字符不是S/M时给出对应提示,提升程序容错性

内容的提问来源于stack exchange,提问作者Lonrukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:57:02