赋值使得整数指针没有强制转换和其他问题

时间:2013-05-16 12:38:11

标签: c pointers casting

我几天前刚刚开始学习C,而且我在使用指针时遇到了一些困难。我正在尝试将字符串转换为整数数组。下面的小snipet似乎正在工作,但我收到了警告:

在函数'charToInt32'中 警告:赋值使得整数指针没有强制转换[默认情况下启用] | || ===构建完成:0个错误,1个警告(0分钟,0秒)=== |

警告来自

int32result[pos] = returnedInteger;

所以我试图了解什么是最好的解决方案。我应该使用strncpy(但我可以使用strncpy作为整数吗?)或其他什么,或者我只是完全误解了指针?

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


    int charToInt32(char * clearText, unsigned int * int32result[])
    {
        int i = 0, j = 0, pos = 0;          /* Counters */
        int dec[4] = {24, 16, 8, 0};        /* Byte positions in an array*/
        unsigned int returnedInteger = 0;           /*   so we can change the order*/ 

        for (i=0; clearText[i]; i+=4) {
            returnedInteger = 0;
            for (j=0; j <= 3 ; j++) {
                returnedInteger |= (unsigned int) (clearText[i+j] << dec[j]) ;
            }

            int32result[pos] = returnedInteger;
            pos++;
        }
        return pos;
    }



    int main()
    {
        int i = 0;
        unsigned int * int32result[1024] = {0};
        char * clearText =  "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        printf(">>Clear: %s\n", clearText);
        charToInt32(clearText, int32result); // Do the conversion to int32.
        printf(">>Int32 converted: ");
        for (i=0; int32result[i]; i++)
            printf("%u ", (unsigned int) int32result[i]);
        printf("\n");
        return 0;
    }

另外,在程序结束时,我有以下几行:

printf("%u ", (unsigned int) int32result[i])

将int32result [i]强制转换为unsigned int是否是避免使用%u作为unsigned int *的另一个警告的唯一解决方案?

我确实检查了另一个“赋值使得指针没有投射的整数”主题/问题,但我无法从他们那里得到最终答案。

谢谢你的帮助。

4 个答案:

答案 0 :(得分:8)

unsigned int * int32result[1024]

声明一个包含1024个unsigned int 指针的数组。我想你想在这里使用一系列的int来代替

unsigned int int32result[1024]

charToInt32中存在类似的问题,其中unsigned int * int32result[]参数指定了unsigned int数组的数组。您有一个数组,因此可以通过unsigned int * int32result(即删除[])。

其余代码应该正常工作。像

这样的电话
charToInt32(clearText, int32result);

相当于

charToInt32(clearText, &int32result[0]);

答案 1 :(得分:2)

您声明charToInt32将指针指向 - unsigned int作为参数,

int charToInt32(char * clearText, unsigned int * int32result[])

但您将参数用作unsigned int的数组,因此参数应为

unsigned int *int32result

或等效(在函数声明中!!不是一般的)

unsigned int int32result[]

main中,它应该是

unsigned int int32result[1024] = {0};

你也有一个指针级别太多了。

答案 2 :(得分:1)

您得到的警告来自于您为指针分配整数值的事实。

/* int32result is an array of POINTERS */
unsigned int * int32result[];
/* But returnedInteger is an int */
unsigned int returnedInteger = 0;
/*...*/
/* int32result[pos] is a pointer to an integer ...
 * Thus here, you assign a "pure" integer to a pointer,
 * hence the warning */
int32result[pos] = returnedInteger;

如果你没有强制转换值,编译器在点击printf时会发出警告也是完全合理的。事实上,普通机器上的指针通常是32位或64位,这足以避免在故障分配期间丢失信息。这就是为什么你的print语句看起来应该像预期的那样工作。

答案 3 :(得分:0)

unsigned int * int32result[] 

是一个unsigned int指针数组,因此您要将值赋给指针。