我初始化了两个我认为是{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;
}
答案 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};
请确保在取消引用之前分配内存。