功能C出错,不兼容类型和分段故障核心转储

时间:2016-01-04 16:53:06

标签: c codeblocks

嘿所以我正在尝试创建一个程序,它接受一个短语并在其中间放置一个单词,继承代码

#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)”

1 个答案:

答案 0 :(得分:3)

你正在走出界限。您的数组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);
   ...
}