error C2440: ‘初期化中’: ‘void *’ から ‘char *’ に変換できません。
警告:C言語なのにC++コンパイラ使ってる?
■51年前のK&Rコンパイラを使ってる?
void K_R_style(const char *src){
char *dst;
dst = (char*)malloc(strlen(src)+1);
if(dst == NULL){
perror(NULL);
return ;
}
strcpy(dst,src);
puts(dst);
free(dst);
}
(1)4行目でキャストが必要なコンパイラは
K&Rという古いコンパイラかもしれません。
⇒そんな古いコンパイラはスミソニアン博物館に寄付しましょう。
(1)4行目でキャストが必要なコンパイラは
C++コンパイラかもしれません。
⇒Visual Studio使用者でC言語のつもりでC++コンパイラを起動している場合がありました。
(3)将来CからC++へ移行するかもしれないので今からキャストすると言う人はYAGNI原則を
勉強しましょう。
■C99仕様のコンパイラではmallocにキャスト不要
void C99_style(const char *src){
char *dst = malloc(strlen(src)+1);
if(dst == NULL){
perror(NULL);
return ;
}
strcpy(dst,src);
puts(dst);
free(dst);
}
■まとめ(コンパイル可能)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//古いK&R年代のmalloc()スタイルか
//別の言語C++のmalloc()スタイル
//※C++ではmalloc/freeは通常使わないんだけど。。。。
void K_R_style(const char *src){
char *dst;
dst = (char*)malloc(strlen(src)+1);
if(dst == NULL){
perror(NULL);
return ;
}
strcpy(dst,src);
puts(dst);
free(dst);
}
//C99仕様のmalloc()スタイル
void C99_style(const char *src){
char *dst = malloc(strlen(src)+1);
if(dst == NULL){
perror(NULL);
return ;
}
strcpy(dst,src);
puts(dst);
free(dst);
}
int main(void){
K_R_style(__func__);
C99_style(__func__);
}
(1)K&Rコンパイラではコンパイルできません。
constとかvoidは昔は無かったので。
(2)C++コンパイラではコンパイルできません。
Cコンパイラを使って下さい。