#include<stdio.h>
main(){
int i=0,j=0;
char s1[10],s2[3]="uw";
for(j=0;j<2;j++)
i+=sprintf(s1+j,"%02x",s2+j);
printf("%d",i);
return 1;
}自己写的函数,运行出来i=12,为什么呢?
main(){
int i=0,j=0;
char s1[10],s2[3]="uw";
for(j=0;j<2;j++)
i+=sprintf(s1+j,"%02x",s2+j);
printf("%d",i);
return 1;
}自己写的函数,运行出来i=12,为什么呢?
%02x是打印2为16进制,不足补0,但是12ffc0是6位,你一个循环,循环了2次,每次打印6个字符,那么结果显然就是12
该函数会被执行2次,两次拼出来的字串长度和就是你的12
说道这两次拼的字串呢,是地址的16进制表示
你自己跟踪一下吧。
不知道你这样的代码是用来做什么的?
j=0时,i+=sprintf(s1,"%02x",s2),此时,i=8了。
j=1时,i+=sprintf(s1+1,"%02x",s2+1);此时,i+=4.
所以最终i=12.
我想问一下s1这个数组里面到底存了多少位?
应该怎样用代码实现?
int len = strlen(s1);
调用一下strlen(s1)就知道了啊。我看是存了7位
sprintf是以最后一个参数为格式的。
那个s2[0] 为U
s2[1] 为W看看函数解释吧。
函数名: sprintf
功 能: 送格式化输出到字符串中
用 法: int sprintf(char *string, char *farmat [,argument,...]);
还有s1存的是‘u’和‘w’的十六进制吧?谢谢!
#include<stdio.h>
#include<string.h>
main(){
int i=0,j=0,k=0;
char s1[10],s2[3]="uw";
for(j=0;j<2;j++)
i+=sprintf(s1+i,"%02x",s2+j);
k=strlen(s1);
printf("k=%d",k);
return 1;}
main(){
int i=0,j=0;
char s1[10],s2[3]="uw";
for(j=0;j <2;j++)
i+=sprintf(s1+j,"%02x",s2+j);
printf("%d",i);
return 1;
} #include <stdio.h>
#include <string.h>
main(){
int i=0,j=0,k=0;
char s1[10],s2[3]="uw";
for(j=0;j <2;j++)
i+=sprintf(s1+i,"%02x",s2+j);
k=strlen(s1);
printf("k=%d",k);
return 1; } 运行为k=12,请问great为什么呢?我一直以为是k=2.
和上面的道理一样啊,6+6,第二次循环,指针移动了6位。还有s1存的是‘u’和‘w’的十六进制吧?
不是,s1里边存的是他们在内存中的地址。