我无法将此字符串复制到列表中的一个数组中,程序在到达该行时会崩溃。你能帮忙解决这个问题吗?谢谢。
这是代码。
typedef struct pedido pedido, *ppedido;
struct pedido{
char id[5];
int prioridade;
int mesa, n_pratos;
pprato prato[TAM];
ppedido prox;
};
struct prato{
char id[5];
};
ppedido AdicionaPratoMenu(ppedido lista, char ped[],char idprato[])
{
int i,j=0,m=0;
while(lista != NULL){
if((strcmp(lista->id, ped)) == 0)
{
for(i=0;i<lista->n_pratos;i++)
{
m++;
}
strcpy(lista->prato[m]->id,idprato); //This is where it goes wrong
}
lista=lista->prox;
}
return lista;
}
答案 0 :(得分:1)
我假设你忽略了这里包括:
typedef struct prato pprato;
有两个潜在的问题:
strlen(idprato)
等于什么?我的猜测是5或更高。strncpy(lista->prato[m]->id, idprato, 4);
。m
时,TAM
必须小于strcpy
。当您在for循环中递增m
时,您还应添加m < TAM
,或者只使用此循环:for (m = 0; m<lista->n_pratos; m++);
一般提示:始终使用strncmp
代替strcmp
;和strncpy
代替strcpy
。即使idprato
的长度始终为4。
答案 1 :(得分:1)
如果TAM == lista->n_pratos
:
strcpy(lista->prato[m]->id,idprato);
因为前一个for
循环只会以TAM == m
结尾(C中的数组索引从0开始)。要更正,请在致电m < TAM
之前确保strcpy()
。
答案 2 :(得分:0)
您需要检查
lista->prato[m]
'm'小于pprato prato[TAM];
idprato
的长度小于5(这是您定义的)。答案 3 :(得分:0)
我假设'pprato'是指向'struct prato'的指针。如果是这样,你有一个指向'struct prato'的指针数组但没有为它们实际分配的内存,然后你试图在strcpy()中取消引用它们。