在格式字符前使用修饰符以指定输入数据的宽度,如下面的程序,输入abcde,希望输出a,d,但是字符变量声明的先后顺序不同却使得结果不一样,导致的原因是什么呢?实在想不明白,希望大佬们能不吝赐教
# include<stdio.h>
int main(){
char c1,c2;
scanf("%3c%2c",&c1,&c2);
printf("%c,%c",c1,c2);
return 0;
}
输入:abcde
输出:e,d
# include<stdio.h>
int main(){
char c2,c1; // why?
scanf("%3c%2c",&c1,&c2);
printf("%c,%c",c1,c2);
return 0;
}
输入:abcde
输出:a,d
这个和内存分配有关系, 局部变量是分配在栈上的, 栈是由高内存到低内存分配的.
案例一
char c1, c2
初始内存
第一次读取3个字符到c1的位置
第二次读取2个字符到c2的位置
案例二
初始内存
第一次读取3个字符到c1的位置
第二次读取2个字符到c2的位置
可以通过程序验证