这个程序的目的是通过将其与前11个质数整数进行除法测试来确定介于1和1000之间的数字是否为质数。该程序在大多数输入情况下都能正常运行。但是,当我输入像468这样的整数时,会检测到栈溢出错误。什么是栈溢出,如何解决这个问题?
我已经尝试研究了栈溢出,但找不到与我的程序相关的具体示例。由于我相对新于使用C进行编程,因此我不知道可以尝试哪些替代方法来修改程序。
我已经尝试研究了栈溢出,但找不到与我的程序相关的具体示例。由于我相对新于使用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
strcat()
函数试图修改只读内存,而且可能会超出数组的末尾(如果它能工作的话,那么这个数组在堆栈上)。请了解一下 strcat() 的工作原理(然后在可写内存中为字符串分配更多空间)。 - Michael Dorgan