小编Rah*_*san的帖子

sprintf无法更改printf调用中的静态变量

我似乎无法理解这里到底发生了什么

#include <stdio.h>

const char* mes(int a)
{
    static char mess[100];
    sprintf(mess, "%d", a);
    return mess;
}
const int* hes(int a)
{
    static int arr[100];
    arr[0] = a;
    return arr;
}

int main()
{
    printf("%s %s\n", mes(55), mes(25)); //55 55
    printf("%s\n", mes(55)); //55
    printf("%s\n", mes(25)); //25
    printf("%d %d\n", hes(55)[0], hes(25)[0]); //55 25
}
Run Code Online (Sandbox Code Playgroud)

在第一个printf中,第二个函数似乎被忽略,并且先前输入的输出再次被打印.
起初我认为它是一个静态变量问题,所以我尝试单独打印它们然后它们似乎工作正常.
然后我认为这是一个printf问题所以我试图用整数数组模拟相同的行为,它也在那里工作得很好.
我已经用各种输入运行了这个程序几次,排除了UB的可能性.
那么,我到底错过了什么?

编辑:我在其他地方遇到过这个问题,无法理解发生了什么.所以我用一个简短的示例代码重现了这个问题.但我的问题是,(正如许多人所提到的)是在打印之前评估的所有参数?如果是这样的话,无论评估顺序如何,在两种情况下(int和char数组)都应该有覆盖.

c

2
推荐指数
1
解决办法
80
查看次数

标签 统计

c ×1