私はまだC言語を学習しており、車のデータベースをプログラムしなければならない練習をしています。主な関数では、私は 'carinfo_t'構造体への100個のポインタの配列を宣言しました。 '* createcarinfo'関数では、新しいcarinfo_tインスタンスを作成する必要があります。しかし、私は 'brandOfCar'変数が宣言されていないという問題を抱えています。コンパイラがこの変数が構造体の一部であることを知っておくべきなので、なぜこのメッセージを受け取っているのか分かりません。構造体はプログラム内のデータ型として宣言され、構造体へのポインタはこの関数の先頭で初期化されます。構造体ポインタ関数の宣言されていない変数c
この問題はすでにどこかで尋ねられている場合は申し訳ありません。どんな助力も非常に感謝しています。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <limits.h>
struct carinfo_t
{
char *brandOfCar;
char *modelOfCar;
int yearCarWasBuilt;
float valueOfCar;
};
struct carinfo_t *createCarinfo(char *brand, char *model, int year, float
value)
{
struct carinfo_t *newCarInfo=(struct carinfo_t*) malloc(sizeof(struct
carinfo_t));
newCarInfo->brandOfCar=(char*)malloc(sizeof(char)*
(strlen(brandOfCar)+1));
//Message: error: 'brandOfCar' undeclared (first use in this function)
//function not finished
}
int main()
{
struct carinfo_t *carbase[100]={};
return 0;
}
また、 'malloc(strlen(...)+1)'の代わりに 'strdup'を使うことを提案します。... –
@KeineLust私は' strdup'が大好きです。 。私は移植性の理由でそれをお勧めすることには消極的です。私はそれが標準の一部であることを望んでいます。 – dasblinkenlight
100%ポータブルではなく、 'strdup'、' itoa'、 'trim' ...のような関数(動的割り当てが必要な)が標準ライブラリに含まれていないのはなぜですか?組み込みシステムとの互換性のためだけですか? –