结构指针函数中未声明的变量 c
Undeclared variable c in structure pointer function
我仍在学习 C,并且正在做一个必须对汽车数据库进行编程的练习。在主函数中,我声明了一个包含 100 个指向 'carinfo_t' 结构的指针的数组。在函数“*createcarinfo”中,应创建一个新的 carinfo_t 实例。但我遇到的问题是 'brandOfCar' 变量未声明。我真的不明白为什么我会收到这条消息,因为编译器应该知道这个变量是结构的一部分,对吧?该结构在程序中声明为数据类型,并在该函数的开头初始化指向该结构的指针。
如果这个问题已经有人问过,我很抱歉。很感谢任何形式的帮助。
#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;
}
这是因为您调用了传递给构造函数的变量 brand
,而不是 brandOfCar
。同样,您调用模型变量 model
,而不是 modelOfCar
。这就是 strlen
无法编译的原因。
为保持一致性,最好将变量命名为与结构的字段相同,并在适当的地方添加 const
:
struct carinfo_t *createCarinfo(
const char *brandOfCar
, const char *modelOfCar
, int yearCarWasBuilt
, float valueOfCar) {
struct carinfo_t *newCarInfo=malloc(sizeof(struct carinfo_t));
newCarInfo->brandOfCar=malloc(strlen(brandOfCar)+1);
...
}
另请注意,在 C 中您不要转换 malloc
,也不要乘以 sizeof(char)
,该标准要求在所有平台上都为 1。
我仍在学习 C,并且正在做一个必须对汽车数据库进行编程的练习。在主函数中,我声明了一个包含 100 个指向 'carinfo_t' 结构的指针的数组。在函数“*createcarinfo”中,应创建一个新的 carinfo_t 实例。但我遇到的问题是 'brandOfCar' 变量未声明。我真的不明白为什么我会收到这条消息,因为编译器应该知道这个变量是结构的一部分,对吧?该结构在程序中声明为数据类型,并在该函数的开头初始化指向该结构的指针。
如果这个问题已经有人问过,我很抱歉。很感谢任何形式的帮助。
#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;
}
这是因为您调用了传递给构造函数的变量 brand
,而不是 brandOfCar
。同样,您调用模型变量 model
,而不是 modelOfCar
。这就是 strlen
无法编译的原因。
为保持一致性,最好将变量命名为与结构的字段相同,并在适当的地方添加 const
:
struct carinfo_t *createCarinfo(
const char *brandOfCar
, const char *modelOfCar
, int yearCarWasBuilt
, float valueOfCar) {
struct carinfo_t *newCarInfo=malloc(sizeof(struct carinfo_t));
newCarInfo->brandOfCar=malloc(strlen(brandOfCar)+1);
...
}
另请注意,在 C 中您不要转换 malloc
,也不要乘以 sizeof(char)
,该标准要求在所有平台上都为 1。