我有这个代码示例,我不知道为什么sscanf可以像示例功能中那样工作,而不是像main函数中那样工作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void example(char *seq){
char wert;
while(*seq){
sscanf(seq,"%2x",&wert);
fprintf(stdout,"%c",wert);
seq+=2;
}
}
int main() {
char temp;
char sentence []="1B2873313648";
char *seq=sentence;
example(seq);
printf("\n");
while(*seq){
sscanf(seq,"%2x",&temp);
fprintf(stdout,"%c",temp);
seq+=2;
}
}
答案 0 :(得分:4)
sscanf
格式说明符%x
期望有指向unsigned int
的指针,而不是指向char
的指针,因此由于 undefined behaviour < / em>。请注意编译器警告。在我的MSVC上,此代码会导致崩溃。
此更正后的代码有效。
#include <stdio.h> // missing
#include <stdlib.h>
#include <string.h>
void example(char *seq){
unsigned wert;
while(*seq){
sscanf(seq,"%2x",&wert);
fprintf(stdout,"%02X ",wert);
seq+=2;
//fflush(stdin);
}
}
int main() {
unsigned temp;
char sentence []="1B2873313648";
char *seq=sentence;
example(seq);
printf("\n");
while(*seq){
sscanf(seq,"%2x",&temp);
fprintf(stdout,"%02X ",temp);
seq+=2;
//fflush(stdin);
}
}
程序输出:
1B 28 73 31 36 48 1B 28 73 31 36 48