0

私のコードのどこにセグメンテーション違反があるのか​​ 問題がありました。10 進数を 16 進数に変換する関数を作成しようとしています。また、15&15 を使用する場合、数値は 1111 または 15 になりますか?

これが私のコードです:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char *to_hex(int n);

main(){
    int dec;
    printf("-> ");
    scanf("%d",dec);
    printf(to_hex(dec));
}

char *to_hex(int n){
    char *array = malloc(sizeof(int)*2+8);/*makes array*/
    int i;
    int index=0;/*used for storing into array*/
    for(i=28;i>-1;i=i-4){/*mask and compare 8 times*/
        int shift=n>>i;/*right shift*/
        int mask=shift&15;/*masks*/
        if (mask<10){
            *(array+index)=(char)mask;
            index++;
        }
        else{
            switch(mask){
            case 10:
                *(array+index)='a';
                index++;
                break;
            case 11:
                *(array+index)='b';
                index++;
                break;
            case 12:
                *(array+index)='c';
                index++;
                break;
            case 13:
                *(array+index)='d';
                index++;
                break;
            case 14:
                *(array+index)='e';
                index++;
                break;
            case 15:
                *(array+index)='f';
                index++;
                break;
            }
        }
    }
    *(array+index)='\0';
    return array;
}

: int mask : は 1111 ではなく 15 になると思いますが、正しいでしょうか? ありがとう

4

1 に答える 1

0

scanf("%d",dec);おそらく、に変更することでセグメンテーション違反を回避できscanf("%d",&dec);ます。印刷可能な結果が必要な場合は、*(array+index)=(char)mask;(*(array+index)=(char)mask+'0';または、より良い、array[index] = mask + '0';

printf(to_hex(dec));も少し不確かです。printf("%s",to_hex(dec));代わりに使用してください。より安全です。

于 2013-10-28T16:45:20.613 に答える