出现总线错误:遍历字符串数组时出现10

时间:2019-01-23 06:50:14

标签: c

我初始化了两个我认为是{NULL, NULL, NULL}的字符串数组,我试图遍历数组variableName并检查是否存在某个字符串,例如“你好”。在这种情况下它不存在,所以我希望它能打印"not found",但会出现总线错误:10

char variableName[3][20];
char variableValue[3][20];

void addVar(char name[], char value[]) {

    if (varDeclared(name, variableName) == 1) {

        printf("exists");
        int index = getIndex(name, variableName);
        changeVal(value, variableValue, index);

    }
    else {
        printf("not found");
    }
}

int varDeclared(char name[], char variableName[][20]) {

    int i = 0;

    while(variableName[i]) {
        if (strcmp(name, variableName[i]) == 0) {
            return 1;
            break;
        }
        i++;
    }
    return 0;
}

int getIndex(char name[], char variableName[][20]) {

    int i = 0;

    while(variableName[i]) {
        if (strcmp(name, variableName[i]) == 0) {
            return i;
            break;
        }
        i++;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

声明时

char variableName[3][20];
char variableValue[3][20];

并不是variableName[0]variableName[1]variableName[2]将持有NULL。相反,他们将持有各自的行地址。

因此您的支票如下所示,

 while(variableName[i]) {
    .....
    i++;
 }

将始终返回true,并且访问范围不受限制。


如下更改

while(variableName[i][0] != '\0') //Loop until empty string.

或声明指针数组。

 char *variableName[3] = {NULL,NULL,NULL};
 char *variableValue[3] = {NULL,NULL,NULL};

请确保在取消引用之前分配内存。