函数C错误,不兼容类型和分段故障核心转储



嘿,我正在尝试制作一个程序,它接受一个短语并在其中插入一个单词,这是代码

#include <stdio.h>
#define N 5
void Inserir(float A[N], int x, float palavra) {
    int i;
    for (i=N;i>x;i--){
        A[i]=A[i-1];
    }
    A[x]=palavra;
    for (i=0;i<=N;i++){
        printf("A[i] ");
    }
}
void main () {
    int i, x;
    float frase[N];
    float palavra;
    printf("frase? ");
    for(i=0;i<N;i++){
        printf("palavra %d: ",i); scanf("%f",&frase[i]);
    }
    printf("lugar da palavra nova? ");
    scanf("%d",&x);
    printf("palava nova? "); scanf("%f",&palavra);
    Inserir(frase[N],x, palavra);
} 

但在Inserir(frase[N])上,它给出了错误:"Inserir"的参数1的类型不兼容;但它要求是浮动的,它是浮动的。怎么了?我已经改变了类型,当它没有给出这个错误和构建时,它会在中间崩溃,出现"Segmentation fault(core dumped)"

你已经出界了。您的数组A的长度为N,因此您的元素具有索引0、1。。。N-1。除此之外,要打印float号码,您必须熟练调用print

void Inserir(float A[N], int x, float palavra) {
    int i;
    for (i=N-1;i>x;i--){ // <- N-1
        A[i]=A[i-1];
    }
    A[x]=palavra;
    for (i=0;i<N;i++){ // <- i<N
        printf( "%f", A[i] );
    }
}

frase[N]表示数组中的第N个元素,而不是数组本身。除此之外,N是越界的。在您的main:中使用此功能

int main() {
   ...
   Inserir(frase,x, palavra);
   ...
}

最新更新