打印时出现分段错误

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

您的代码中存在两个主要问题。

  1. 您从用户 (scanf) 获得的输入为 float,但实际上将其用作 int 以将其传递给函数并作为数组的索引 x.
  2. 您应该始终 检查来自终端(或任何地方)的用户输入。在这种情况下,如果实际输入在 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);
    }
}

可能会解决您的分段错误问题。