предупреждение: присваивание делает целое число из указателя без приведения - PullRequest
0 голосов
/ 06 мая 2011
#include <stdio.h>
#include <string.h>
#include <math.h>
#define NUM 8

int main() {
    int i, len, sum, offset, remain;
    char bin[32];
    char hexlist[6][1] = {"A", "B", "C", "D", "E", "F"};
    char hex[NUM] = "00000000";
    int hexlen = NUM;
    while (1) {
        scanf("%s", bin);
        if (strcmp(bin, "0") == 0) {
            break;
        }
        len = strlen(bin);
        offset = 0;
        while (offset < len) {
            sum = 0;

            if (len - offset >= 4) {
                for (i = 0; i < 4; i++) {
                    sum += (bin[len-1-i-offset] - '0') * pow(2, i);
                }
            }
            else {
                remain = len - offset;
                for (i = 0; i < remain; i++) {
                    sum += (bin[len-1-i-offset] - '0') * pow(2, i);
                }
            }

            if (sum > 10)
                // I got "warning: assignment makes integer from pointer without a cast"
                hex[--hexlen] = hexlist[sum%10];
            else
                hex[--hexlen] = (char)(((int)'0')+sum);

            offset += 4;
        }
        printf("%s\n", hex);
    }
    return 0;
}

Я пытался hex[--hexlen] = (char)hexlist[sum%10];, но я получил "предупреждение: приведение от указателя к целому числу другого размера"

Ответы [ 2 ]

4 голосов
/ 06 мая 2011

То, что вы хотите, это:

char hexlist[] = {'A', 'B', 'C', 'D', 'E', 'F'};

В C символьная константа между двойными кавычками указывает строку символов и заканчивается нулевым символом \0. Символьная константа между одинарными кавычками указывает на один символ.

1 голос
/ 06 мая 2011

hexlist - массив массивов

char hexlist[6][1];

каждый элемент hexlist является массивом ... и обычно ссылки на такие массивы распадаются на указатели. Вот что происходит в вашем коде: hexlist[sum % 10] является объектом типа char[1] и распадается на указатель.

Затем вы пытаетесь присвоить этот указатель элементу hex типа char. Типы несовместимы, и после продвижений по умолчанию компилятор жалуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...