数日前に 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 を使用するという別の警告を回避する唯一の解決策ですか?
他の「代入はキャストなしのポインターから整数を作成する」トピック/質問を確認しましたが、それらから最終的な回答を得ることができませんでした。
ご協力ありがとうございました。