7

数日前に 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 にキャストすることは、 unsigned int * に %u を使用するという別の警告を回避する唯一の解決策ですか?

他の「代入はキャストなしのポインターから整数を作成する」トピック/質問を確認しましたが、それらから最終的な回答を得ることができませんでした。

ご協力ありがとうございました。

4

4 に答える 4

0
unsigned int * int32result[] 

unsigned intポインターの配列であるため、値をポインターに割り当てています。

于 2013-05-16T12:44:13.800 に答える