我正在用一行中的数据填充结构,行格式可以是 3 种不同的形式:
1.-“LD”(仅一个字)
2.-“LD A”(仅 2个字)3.-“
LD A ,B "(第二个单词用逗号隔开)。
名为 instruccion 的结构只有 3 个指针指向每个部分(mnemo
和op1
)op2
,但是在为第二个单词分配内存时,有时malloc
返回的值与为第一个单词给出的值相同。这是带有mallocs
指出的代码:
instruccion sepInst(char *linea){
instruccion nueva;
char *et;
while(linea[strlen(linea)-1]==32||linea[strlen(linea)-1]==9)//Eliminating spaces and tabs at the end of the line
linea[strlen(linea)-1]=0;
et=nextET(linea);//Save the direction of the next space or tab
if(*et==0){//If there is not, i save all in mnemo
nueva.mnemo=malloc(strlen(linea)+1);
strcpy(nueva.mnemo,linea);
nueva.op1=malloc(2);
nueva.op1[0]='k';nueva.op1[1]=0;//And set a "K" for op1
nueva.op2=NULL;
return nueva;
}
nueva.mnemo=malloc(et-linea+1);<-----------------------------------
strncpy(nueva.mnemo,linea,et-linea);
nueva.mnemo[et-linea]=0;printf("\nj%xj",nueva.mnemo);
linea=et;
while(*linea==9||*linea==32)//Move pointer to the second word
linea++;
if(strchr(linea,',')==NULL){//Check if there is a coma
nueva.op1=malloc(strlen(linea)+1);//Do this if there wasn't any coma
strcpy(nueva.op1,linea);
nueva.op2=NULL;
}
else{//Do this if there was a coma
nueva.op1=malloc(strchr(linea,',')-linea+1);<----------------------------------
strncpy(nueva.op1,linea,strchr(linea,',')-linea);
nueva.op1[strchr(linea,',')-linea]=0;
linea=strchr(linea,',')+1;
nueva.op2=malloc(strlen(linea)+1);
strcpy(nueva.op2,linea);printf("\n2j%xj2",nueva.op2);
}
return nueva;
}
当我打印指针时,它恰好是相同的数字。注意:函数 char *nextET(char *line) 返回行中第一个空格或制表符的方向,如果没有则返回行尾的方向。
sepInst()
在一个程序中被多次调用,并且只有在被多次调用后才会开始失败。mallocs
我所有程序中的这些都让我很头疼。