|
>%x の相方は unsigned int でなければなりません。
>unsigned int BBB[2]; にすれば動くでしょう。
>VC++ でも正しい値は得られなかったはずです。
それですね。もっともVC++/Windowsの場合、[0]から順番に格納している限りは
問題は表面化しないようです。まあ後ろは破壊されてるんですが。
メモリダンプしてみるとわかりやすいかもしれません。
#include <stdio.h>
void memorydump(char *p, int searchrange){
int i, m = (int)p % 16;
printf(" +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f\n");
printf("%08x", (int)p - m);
for(i = 0; i < m; i++)printf(" ");
for(i = 0; i < searchrange; i++){
printf(" %02x", (unsigned char)*p);
p++;
m++;
if(m >= 16){
printf("\n%08x", (int)p);
m = 0;
}
}
printf("\n\n");
}
int main(void){
int ret;
char AAA[7] = "512641";
char BBB[3] = {0x20, 0x20, 0x20};
printf("&BBB[0] = %p, &BBB[1] = %p, &BBB[2] = %p\n\n", &BBB[0], &BBB[1], &BBB[2]);
memorydump(BBB, 32);
printf("sscanf実行\n\n");
ret = sscanf(AAA, "%02x%02x%02x", &BBB[0], &BBB[2], &BBB[1]);
memorydump(BBB, 32);
return 0;
}
もしかすると環境依存のコードかも知れませんが参考までに。
>ret=sscanf(AAA,"%02x%02x",BBB[0],BBB[1]);
これは、何かの勘違いだと思います。
|