【问题标题】:Why is the output of my C program incorrect?为什么我的 C 程序的输出不正确?
【发布时间】:2015-02-02 21:20:43
【问题描述】:

这是我从输入中读取数据的 C 代码:

#include<string.h>
#define MAX 3
char a[MAX];
char b[MAX];
void ReadFirstNumber();
void ReadSecondNumber();
int lb,la=0;
void main()
{
    ReadFirstNumber();
    ReadSecondNumber();
    printf("\n First Number > %d %d %d \n",a[0],a[1],a[2]);
    printf(" Second Number >  %d %d %d \n",b[0],b[1],b[2]);
}
void ReadFirstNumber()
{
    int i=0;
    printf("Enter the first number:");
    scanf("%s", a);
    la=strlen(a)-1;
    for(i=0;i<=la;i++)
    {
        a[i] = a[i] -48;
    }
}
void ReadSecondNumber()
{
    int j=0;
    printf("Enter the Second number:");
    scanf("%s", b);
    lb=strlen(b)-1;
    for(j=0;j<=lb;j++)
    {
        b[j] = b[j] -48;
    }
}

输入第一个数字示例:123
输入第二个数字示例:456 或任何 3 位数字

//output
First Number    **0**23
Second Number   456 

第一个数字的输出是023

第一个字符是!但是第二个数字的输出没问题。

当我注释掉第二个函数 //ReadSecondNumber(); 时,它运行良好!

【问题讨论】:

  • MAX 定义不够大,不能包含三个字符的字符串,(空终止符),所以 UB 'cos 超出了数组的范围。
  • 好的,谢谢你的回答很完美!
  • void main() 也是未定义的行为,请改用int main(void)

标签: c arrays output


【解决方案1】:

您未能为 scanf("%s",...) 在 'strings' 末尾写入的空终止符 char 留出足够的空间。增加 MAX #define 的值。您也可以放入更大的东西,例如 32。

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多