C 获取总线错误:在字符串数组中循环时为10
我初始化了两个字符串数组,我认为它们是C 获取总线错误:在字符串数组中循环时为10,c,C,我初始化了两个字符串数组,我认为它们是{NULL,NULL,NULL}我试图迭代数组变量名并检查是否存在某个字符串,例如“hello”。在这种情况下它不存在,所以我希望它打印出“notfound”,但是我得到了一个总线错误:10 char variableName[3][20]; char variableValue[3][20]; void addVar(char name[], char value[]) { if (varDeclared(name, variableName)
{NULL,NULL,NULL}
我试图迭代数组变量名
并检查是否存在某个字符串,例如“hello”。在这种情况下它不存在,所以我希望它打印出“notfound”
,但是我得到了一个总线错误: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;
}
当你申报时
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};
请确保在取消引用之前分配内存。当您声明
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};
请确保在取消引用之前分配内存。是否可以添加一个
main()
函数来显示正在运行和崩溃的代码?请进行修改。还考虑检查这个列表“斯特凡”,你最好问一下。要做到这一点,请在您的评论中写入[mcve]
。您可以添加一个main()
函数来显示正在运行和崩溃的代码吗?请创建一个。还考虑检查这个列表“斯特凡”,你最好问一下。要做到这一点,请在评论中写入[mcve]
。