在C中使用struct来理解错误需要帮助

时间:2014-09-12 12:48:10

标签: c

我正在尝试使用struct值的不同方法,但所有这些方法都会给我错误。 所以, 我有以下全局结构:

struct Car_ {
    char *currentCar;
    char **cars;
}carPars;

然后我正在修改指定* currentCar成员指向**汽车的第一个数组。 我是按照以下方式进行的:

tokenizer->currentToken = tokenizer.tokens[0];

这告诉成员引用类型'struct TokenizerT_'不是指针;也许你打算用'。'?

然后我以这种方式尝试

carPars.currentCar = carPars.cars[0];

但是当我运行我的程序时,这实际上给了我EXC_BAD_ACCESS(这通常意味着分段错误)。

然后我尝试:

(*curPars).currentCar = (*car).currentCar[0];

然后我有 - 间接需要指针操作数

我怎么能以正确的方式做到这一点?

3 个答案:

答案 0 :(得分:1)

您需要先向cars分配内容。大概你想要它是一个数组,比如50个元素:

carPars.cars = calloc(50, sizeof (char*));

答案 1 :(得分:1)

首先,您必须为汽车分配内存,即所需的阵列数量。让我们说10:

cars = (char**)malloc (10*sizeof(char));

然后你必须为每个10个阵列分配内存。让我们说在每个数组中你需要10个元素:

> for (index = 0; index< 10; index++)
>      cars[index] = (char*) malloc(10*sizeof(char));

然后,要分配给CurrentCar,您可以执行以下操作:

carPars.currentCar = carPars.cars[i];

答案 2 :(得分:1)

您尚未初始化struct Car_类型的carPars变量的第二个成员。由于双指针**汽车中没有存储任何值。您可以尝试以下方法:

 carPars.cars = NULL;
    carPars.currentCar = carPars.cars[0];

如果它仍然没有用,你可以试试这个:

carPars.cars = (char *)malloc(10*sizeof(char*));
for(i=0; i<5; i++)
    carPars.currentCar = (char)malloc(10*sizeof(char));

这里我假设您要存储10辆汽车,每个汽车名称最多包含10个字符。 您可以根据需要更改此值。