c - 赋值从整数生成指针,没有强制转换和其他问题

标签 c pointers casting

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

在函数“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 * 的唯一解决方案吗?

我确实检查了其他“Assignment makes integer from pointer without cast”主题/问题,但我无法从他们那里得到最终答案。

谢谢你的帮助。

最佳答案

unsigned int * int32result[1024]

声明了一个包含 1024 个 unsigned int 指针 的数组。我想你想要一个整数数组来代替

unsigned int int32result[1024]

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

您的其余代码应该就可以正常工作了。调用方式

charToInt32(clearText, int32result);

相当于

charToInt32(clearText, &int32result[0]);

关于c - 赋值从整数生成指针,没有强制转换和其他问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16587672/

相关文章:

c++ - 如果进程被 SIGKILLed,操作系统(POSIX)是否刷新内存映射文件?

C++ 收集2 : error: ld returned 1 exit status

c - 何时使用 NULL 以及何时在 C 的链表中使用 '\0'?

c++ - c或c++中的静态 block 是什么?

C - 如何在不篡改输出文本中现有行的情况下编写新行?

c++ - C++ 中的部分 const 类型转换

在 Windows 中将 __int64 转换为 long

java - 计算 Integer 值的每个数字的总和

c - 无法理解如何处理 C 字符串

c - C 中的指针和数组 - 极其困惑