这是矩阵的正确,类型和逻辑吗?

时间:2015-02-04 23:26:27

标签: c matrix strcmp

我需要在矩阵行中放入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,我无法使用,所以我错过了一些东西。

这是正确的方法吗?

1 个答案:

答案 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];