没有错误显示的静态变量更改值?

问题描述

代码

SELECT dbo.UDF_STRIP_HTML(some_column) 
FROM some_table 

输出

#include <stdio.h>

int main()
{
    int a=10;
    static int b=2;
    a = a+1;
    b = b-1;
    printf("%d \n",a);
    printf("%d \n",b);
    printf("%d \n","%d",a,b);
    return 0;
}

我的问题: b 是一个静态变量,那么它的值在使用的第二个 printf() 函数中是如何改变的呢?第三个 printf() 函数有意义,因为它给出了一个错误

解决方法

对于程序开头的初学者,您更改​​了静态变量 b

b = b-1;

关键字 static 没有关键字 const 的含义。

另一方面,在 printf 的这个调用中,显然有一个错字

printf("%d \n","%d",a,b);
               ^^^^

实际上,您正在尝试将指向字符串文字 "%d" 的指针作为整数输出。

即该函数有四个参数,第一个参数中只有一个转换说明符。

编译器可能会发出警告,指出 printf 的调用中有多余的参数。

你可以这样写:)

printf("%d \n" "%d",b);

在这种情况下,输出将是

11
1

因为上面的调用等价于

printf("%d \n%d",b);

但你的意思是

printf("%d %d\n",b);

所以这两个静态变量都不会自发改变。

,

export const TagItem = styled.View` position: absolute; top: ${(props) => `${props.locationY}px`}; left: ${(props) => `${props.locationX}px`}; justify-content: center; `; 签名是

printf

第一个参数是格式字符串,后面的所有参数都是格式说明符(以 % 开头的子序列)。

int printf ( const char * format,... );

上面的代码调用了未定义的行为,因为第一个格式说明符 printf("%d \n",b); 用于表示十进制整数值,而与此说明符匹配的参数是 %d",其类型为 { {1}}。

您应该将其更改为:

"%d