前提・実現したいこと
ネットで調べながらコーディングしてみたのですが、void型をuint32_t型にキャストしたいのですがエラーになってしまい、どう対処すればよいか困っています。
最終的にはLinuxコマンドのinet_ptonを作るつもりです。
お力添えいただければ幸いです。
宜しくお願い致します。
発生している問題・エラーメッセージ
エラー: ‘uint32_t {aka unsigned int}’ から ‘const void*’ へ の無効な変換です [-fpermissive] memcpy( dst, No.number1, 4); エラー: initializing argument 2 of ‘void* memcpy(void*, const void*, size_t)’ [-fpermissive] extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
該当のソースコード
C言語
1#include <assert.h> 2#include <arpa/inet.h> 3#include <stdio.h> 4#include <stdlib.h> 5#include <string.h> 6 7 8int inet_pton(const char *src, void *dst ){ 9 10 // 変数の宣言 11 int suuti1,suuti2,suuti3,suuti4; 12 13 // 共用体の型の定義 14 union number{ 15 uint32_t number1; 16 uint8_t number2[4]; 17 }; 18 19 // 共用体の変数名の宣言 20 union number No; 21 22 // srcの文字列を数値に変換する 23 sscanf( src, "%d.%d.%d.%d", &suuti1, &suuti2, &suuti3, &suuti4 ); 24 25 // 数値に変換したものを変数に格納する 26 No.number2[0] = suuti1; 27 No.number2[1] = suuti2; 28 No.number2[2] = suuti3; 29 No.number2[3] = suuti4; 30 31 // void型のdstをuint32_t型にキャストする 32 No.number1 = ( uintptr_t )&dst; 33 34 // number1の4バイト分のメモリをdstにコピーする 35 memcpy( dst, No.number1, 4); 36 37 38 return( 1 ); 39} 40 41int main(){ 42 int result; 43 struct in_addr in_addr; 44 45 result = inet_pton("130.0.7.23", &in_addr); 46 assert(result == 1 && in_addr.s_addr == ((23<<24)|(7<<16)|(0<<8)|130)); 47 48 result = inet_pton("130.00.7.23", &in_addr); 49 assert(result == 0); 50 51 result = inet_pton("130.01.7.23", &in_addr); 52 assert(result == 0); 53 54 return(0); 55}
回答3件
あなたの回答
tips
プレビュー