为什么例1中第一个print函数中, strlen(str)的值在strcpy(str,"abcde")执行之后没有变为5,在整个printf函数结束之后才变为5,而例2中第一个printf函数中a的值在a=3*4之后变成了12 ?
//printf()里的多个表达式问题
#include<stdio.h>
#include<string.h>
int main()
{
//例1.
char str[10] = "abc";
printf("%s\t%d\n",strcpy(str,"abcde"),strlen(str));
printf("%d\n\n",strlen(str));
//例2.
int a = 2;
printf("%d\t%d\n",a=3*4,a);
printf("%d\n\n",a);
return 0;
}
【运行结果】
abcde 3
5
12 12
12
printf里的参数是从右往左入栈的,先进后出的模式。
这涉及到优先级的问题。
printf()输出表达式的运算顺序是由右向左的,输出的时候是从左到右。
不知道你这个问题是否已经解决, 如果还没有解决的话: