printf函数可以赋值给int类型变量?

c primer plus 里的一个课后题:

其中有一个语句是这样的
int width = printf(""%s".\n",name);
没看懂为什么printf可以赋值给int类型数据

答案原码:

#include <stdio.h>
int main(void)
{
    char name[40];
    int width;

    printf("Please input your name:");
    scanf("%s",name);

    width = printf("\"%s\".\n",name);          //就是这句。
    width -= 4;        

    printf("\"%20s\".\n",name);
    printf("\"%-20s\".\n",name);
    printf("\"%*s\".\n",(width+3),name);
    return 0;
}

printf返回的是打印的字符的长度。这段代码这样用,应该是为了根据字符串的长度调整布局

printf("\"%*s\".\n",(width+3),name);

意思是输出字符串name,但至少占width+3个位置,不足的在字符串name左边补空格

printf返回值为int型,返回字符或数字的个数