在传递给函数时,为什么指针在某些情况下会有所不同?

时间:2019-05-02 19:27:13

标签: c

我有这个代码示例,我不知道为什么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;
    }
}

1 个答案:

答案 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