打印时出现分段错误
Segmentation Fault while printing
#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] = %d\n", k, c[k]);
}
当我 运行 程序时,它在此处给我分段错误:
printf("x[%d] = %d\n", k, c[k]);
谁能看出真正的问题是什么?
可以看到截图:
segmentation fault in 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] = %d\n", 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);
}
}
可能会解决您的分段错误问题。
#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] = %d\n", k, c[k]);
}
当我 运行 程序时,它在此处给我分段错误:
printf("x[%d] = %d\n", k, c[k]);
谁能看出真正的问题是什么?
可以看到截图: segmentation fault in 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] = %d\n", 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);
}
}
可能会解决您的分段错误问题。