我正在尝试使用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];
然后我有 - 间接需要指针操作数
我怎么能以正确的方式做到这一点?
答案 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个字符。 您可以根据需要更改此值。