该程序的目的是通过测试其与前 11 个素整数的可除性来确定 1 到 1000 之间的数字是否为素数。该程序在大多数输入下正常运行。但是,当我输入诸如 468 之类的整数时,会检测到堆栈粉碎。什么是堆栈粉碎,如何解决问题?
我尝试过研究堆栈粉碎,但我找不到与我的程序相关的具体示例。我不知道我可以尝试修改程序的替代方法,因为我对使用 C 编程相对较新。
char divStatement[] = " is divisible by ";
if ((userInput % 31) == 0) {
div31 = true;
strcat(divStatement, "31, ");
}
if (div2 || div3 || div5 || div7 || div11 || div13 || div17 || div19 || div23 || div29 || div31) {
divStatement[strlen(divStatement) - 2] = '.';
divStatement[strlen(divStatement) - 1] = 'n';
printf("%d%s", userInput, divStatement);
printf("%d is not prime.n", userInput);
}
else {
printf("%d is prime.n", userInput);
}
输出实际上工作正常。但是,在程序结束时,终端输出:
***stack smashing detected ***: ./a.out terminated
Aborted
char divStatement[] = " is divisible by ";
if ((userInput % 31) == 0) {
div31 = true;
strcat(divStatement, "31, ");
}
divStatement
是一个恰好足够大的字符数组,可以容纳" is divisible by "
和一个