警告:赋值从指针生成整数而没有强制转换

时间:2011-05-05 21:50:22

标签: c

#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 个答案:

答案 0 :(得分:4)

你想要的是这个:

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

在C中,双引号之间的字符常量表示字符串,并以空字符\0结束。单引号之间的字符常量表示单个字符。

答案 1 :(得分:1)

hexlist是一个数组数组

char hexlist[6][1];

hexlist的每个元素都是一个数组......并且通常引用这样的数组会衰减为指针。这就是你的代码中的内容:hexlist[sum % 10]char[1]类型的对象并衰减为指针。

然后尝试将该指针分配给类型为hex的{​​{1}}元素。这些类型是不兼容的,在默认促销之后,编译器会抱怨。