"C2440: '=' : 'void *' から 'char *' に変換できません。" に関する原因と対処

このコンパイルエラーの原因と対処に関して説明します。

スポンサード リンク

Microsoft Visual C++にて以下のソースでコンパイルエラーが発生します:

コンパイルエラーメッセージ:
error C2440: '=' : 'void *' から 'char *' に変換できません。 'void*' から非 'void' 型への変換には明示的なキャストが必要です。

ソース(バグ有り):

#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *buf = NULL;
buf = malloc( 1000 );
if( buf == NULL )
{
printf( "メモリの確保処理でエラーが発生しました。\n" );
return -1;
}
sprintf( buf, "テストメッセージ。\n" );
printf( "%s", buf );
free( buf );
return 0; }


原因:
malloc 関数の戻り値はvoid 型のポインタです。void型は型が無いポインタなので明示的なキャストが必要です。


対処:
malloc の戻り値を格納するポインタの型を指定します。

サンプルでは以下のように修正を行います。


buf = (char *)malloc( 1000 );


ソース(修正済み):

#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *buf = NULL;
buf = (char *)malloc( 1000 );
if( buf == NULL )
{
printf( "メモリの確保処理でエラーが発生しました。\n" );
return -1;
}
sprintf( buf, "テストメッセージ。\n" );
printf( "%s", buf );
free( buf );
return 0; }

スポンサード リンク



[コンパイルエラーコード、メッセージに戻る]