
error C2440: ‘初期化中’: ‘void *’ から ‘char *’ に変換できません。
警告:C言語なのにC++コンパイラ使ってる?
■51年前のK&Rコンパイラを使ってる?
#include <stdio.h>
#include <stdlib.h>
int main(void){
char *str;
int num;
int i;
printf("1から26の数字をどれか入力して下さい\n");
scanf("%d", &num);
str = (char *) malloc(sizeof(char) * (num + 1));
if (!str) {
perror("メモリが確保できませんでした。\n");
return -1;
}
for (i = 0; i < num; i++) {
str[i] = 'a'+ i ;
}
str[num] = '\0';
printf("%d文字の:%s:を生成しました。\n",num,str);
free(str);
return 0;
}
(1)12行目でキャストが必要なコンパイラは
K&Rという古いコンパイラかもしれません。
⇒そんな古いコンパイラはスミソニアン博物館に寄付しましょう。
(2)12行目でキャストが必要なコンパイラは
C++コンパイラかもしれません。
⇒Visual Studio使用者でC言語のつもりでC++コンパイラを起動している場合がありました。
(3)将来CからC++へ移行するかもしれないので今からキャストすると言う人はYAGNI原則を
勉強しましょう。
■C99仕様のコンパイラではmallocにキャスト不要
#include <stdio.h>
#include <stdlib.h>
int main(void){
printf("1から26の数字をどれか入力して下さい\n");
size_t num;
scanf("%zu", &num);
char *str = malloc(num + 1);
if (str == NULL) {
perror("メモリが確保できませんでした。\n");
return -1;
}
for (size_t i = 0; i < num; i++) {
str[i] = 'a' + i;
}
str[num] = '\0';
printf("%zu文字の:%s:を生成しました。\n",num,str);
free(str);
}
