#include <stdlib.h>
#include <stdio.h>
#include "string.h"
//This function tries to calculate result of the floor function for floats <= 9999.
int main(int argc, char* argv[]) {
int i, j;
float k;
int x[10000];
for(i = 0; i < 10000; ++i){
x[i] = i;
}
printf("Enter a float in 0..9999: ");
scanf("%f", &k);
tester(x, k);
}
int tester(int* c, int k) {
printf("x[%d] = %dn", k, c[k]);
}
当我运行程序时,它会在这里给我分段错误:
printf("x[%d] = %dn", k, c[k]);
有人能看到真正的问题是什么吗?
您可以看到屏幕截图:printf 中的分段故障
您的代码中有两个主要问题。
- 您从用户(scanf(获得的输入为float,但实际上使用它作为int将其传递到函数中并作为数组
x
的索引 - 您应该始终检查来自终端(或任何地方(的用户输入。在这种情况下,如果实际输入在0和9999之间,则检查应至少为
改进版:
#include <stdlib.h>
#include <stdio.h>
#include "string.h"
void tester(int* c, int k) {
printf("x[%d] = %dn", k, c[k]);
}
//This function tries to calculate result of the floor function for floats <= 9999.
int main(int argc, char* argv[]) {
int i;
int k;
int x[10000];
for(i = 0; i < 10000; ++i){
x[i] = i;
}
printf("Enter a float in 0..9999: ");
scanf("%d", &k);
if (k >= 0 && k < 10000) {
tester(x, k);
} else
{
printf("Sorry, your input %d was invalid.", k);
}
}
这可能会解决您的分段故障问题。