题目:以下代码执行的结果是多少?
char buffer[200],s[]="hello",c='c';
int i=35,j;
float fp=1.7320534f;
j=sprintf(buffer,"%s",s);
j+=sprintf(buffer+j,"%c",c);
j+=sprintf(buffer+j,"%d",i);
j+=sprintf(buffer+j,"%f",fp);
printf( "字符个数= %d\n", j );
【参考答案】
字符个数=16
【解析】
buffer作为把格式化的数据写入的字符串缓冲区。即输出结果为helloc351.732053,注意的是,其结果是不包括以’\0’结尾的字符。
题目:以下代码执行的结果是多少?
char s[20];
sprintf(s,"%d",123);
sprintf(s,"%-4d%-4d",123,456);//左对齐
sprintf(s,"%4d%4d",123,456);//右对齐
printf("%s",s);
【参考答案】
123 456。
题目:以下代码执行的结果是多少?
char s[20];
sprintf(s,"%8x",4567);//右对齐,小写字母,11d7
sprintf(s,"%-8X",4567);//左对齐,大写字母,11D7
sprintf(s,"%08X",4567);//宽为8个字符,左边补零
printf("%s",s);
【参考答案】
000011D7
题目:以下代码执行的结果是多少?
char s[20];
short si=-1;
sprintf(s,"%04X",si);
printf("%s\n",s);
sprintf(s,"%04X",(unsigned short)si);
printf("%s\n",s);
sprintf(s,"%08X",(unsigned short)si);
printf("%s",s);
【参考答案】
FFFFFFFF
FFFF
0000FFFF
【解析】
第一个打印产生“FFFFFFFF”,怎么回事?因为sprintf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。
题目:怎样把数字转为字符串(与atoi相反)?有itoa函数吗?
【参考答案】
用sprintf就可以了:
sprintf(string,”%d”,number);
(不需担心用sprintf会小题大做,也不必担心会浪费运行时间或代码空间,实践中它工作得挺好。)
同理,也可以用sprintf把long型或浮点数转换成字符串(使用%ld或%f)。也就是说,可以把sprintf看成是atol和atof的反函数。同时,你也有一定的格式控制。因为这些原因,C提供sprintf作为通用解决方法,而不是itoa。
题目:以下代码输出结果为多少?
char s[20];
sprintf(s,"%f",3.1415926);
printf("%s\n",s);//默认保留小数点为6位数字,3.141593
sprintf(s,"%-10.3f",3.1415926);//"3.142 ",10为宽度,3为3位小数
printf("%s\n",s);
sprintf(s,"%.3f",3.1415926);
printf("%s\n",s);
【参考答案】
3.141593
3.142
3.142
题目:输出结果为多少?
int i=100;
sprintf(s,"%.2f",i);
printf("%s\n",s);
【参考答案】
0.00 因为参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当时被压入栈里的是个整数,于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。
题目:以下代码输出结果是多少?
char a[20];
char *p="Hello,China";
cout<<p<<endl;
_snprintf(a,10,"%s",p);
printf("snprintf a is:%s\n",a);
【参考答案】
Hello,China
snprintf a is:Hello,Chin烫烫烫烫烫烫烫怍??
分析:p指向字符串,打印p时,则就把字符串打印出来了。但如果使用了_snprintf函数,其字符串拷贝到a数组当中,则由于只把10个字符(“hello,Chin”)拷贝到a数组,a数组剩下的10个字符并未初始化,所以输出”hello,Chin”之后就会乱码。