我需要在矩阵行中放入4个字节和接下来的4个字节。例如:
verd verm azul amar bran pret null
verd verm amar azul pret null bran
amar verd amar azul null null bran
...
所以第一个位置mastermind [0] [0]返回“verd”,下一个mastermind [0] [5]返回“verm”
int main(void){
int i;
char **mastermind;
mastermind=(char **)malloc(sizeof(char *));
for(i=0; i<7; i++)
mastermind[i]=(char *)malloc(36*sizeof(char));
printf("Define Password: \n\tverd = 0 \n\tverm = 1 \n\tazul = 2 \n\tamar = 3 \n\trosa = 4 \n\tlila = 5\n");
scanf("%s %s %s %s", &mastermind[0][0], &mastermind[0][5], &mastermind[0][10], &mastermind[0][15]);
printf("\nPassword: %s %s %s %s\n", &mastermind[0][0], &mastermind[0][5], &mastermind[0][10], &mastermind[0][15]);
printf("\n");
scanf("%s %s %s %s", &mastermind[1][0], &mastermind[1][5], &mastermind[1][10], &mastermind[1][15]);
return 0;
}
问题是我正在使用'&amp;'对于访问和某些函数,如strcmp,我无法使用,所以我错过了一些东西。
这是正确的方法吗?
答案 0 :(得分:3)
这些行:
int i;
char **mastermind;
mastermind=(char **)malloc(sizeof(char *));
for(i=0; i<7; i++)
mastermind[i]=(char *)malloc(36*sizeof(char));
将导致未定义的行为,因为您为一个指针分配空间,但将其用作7个指针的数组。
更改行:
mastermind=(char **)malloc(sizeof(char *));
到
mastermind=malloc(sizeof(char *)*7);
更好的是,使用:
mastermind=malloc(sizeof(*matermind)*7);
<强>更新强>
由于你知道数组的大小,你可以通过使用完全避免使用malloc
:
char mastermind[7][36];