2
我仍在學習C語言,並且正在做一個練習,我必須編寫一個汽車數據庫。在主函數中,我聲明瞭一個包含100個指向'carinfo_t'結構的指針的數組。在函數'* 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;
}
我也會建議使用'strdup'(如果有的話)而不是'malloc(strlen(...)+ 1)'... –
@KeineLust我喜歡'strdup',它爲我節省了很多打字。不過,我不願意爲便攜性原因推薦它。我希望它是標準的一部分,特別是考慮到它的簡單性。 – dasblinkenlight
是真實的,不是100%可移植的,但爲什麼像'strdup','itoa','trim'這些函數(需要動態分配)不包含在標準庫中?只是爲了與嵌入式系統兼容? –