gpt4 book ai didi

c - 处理输入时意外卡住

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:43 30 4
gpt4 key购买 nike

我一直在尝试处理用户可以从中选择的多个功能,但由于某种原因,意外输入并没有引起发达的 react ,而是卡住。

int main(){
int done = 0, isModeValid = 1;
char nextMode[15], *options[] = {"quit", "test", "getASCII"};

while(done == 0){
cls();
isModeValid = 0;
text(1);
currentOptions(options);
gets(nextMode);
int i = 0;
for(i = 0; i < (sizeof(options)); i++){
if(strcmp(nextMode, options[i]) == 0){
done = runMode(i);
break;
}
//Error seems to happen after this point
if(strcmp(nextMode, options[i]) != 0 && i == sizeof(options)){
cls();
text(3);
Sleep(750);
}
}
}
return 0;
}
void cls(){
system("cls");
}

最佳答案

您正在调用未定义的行为。 sizeofbytes/char 生成参数的大小,而不是数组的长度。因此,您迭代的元素多于数组实际包含的元素,并尝试访问超出其边界的元素。

使用 sizeof(options)/sizeof(options[0]) 获取独立于每个条目类型的长度。

注意:声明数组static 将在调用main 之前对其进行分配和初始化。每次调用该函数时,您当前的版本都会这样做。虽然对 main 不重要,但它对多次调用的其他函数很重要。

关于c - 处理输入时意外卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235367/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com