从终端输入读取浮点数时出现分段错误

时间:2017-11-13 08:22:03

标签: c loops segmentation-fault

确认输入分段故障后弹出,我看不清楚原因。我被告知在循环中使用fgetssscanf从终端输入中读取未定义数量的浮点数,这就是我想出来的。

代码

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define EMPTY 3.141592
#define BUFFERSIZE 100

void removeSubstring(char *s,const char *toremove){
  while( (s=strstr(s,toremove)) )
    memmove(s,s+strlen(toremove),1+strlen(s+strlen(toremove)));
}

int main(){

    int x=0;
    int y=0;
    float a[BUFFERSIZE] = {EMPTY};
    char buffer[BUFFERSIZE] = {EMPTY};
    char *pos;
    char *start = 0;
    int space = ' ';

    printf("Input: ");
    fgets(buffer, BUFFERSIZE, stdin);

    while(x< BUFFERSIZE){
            sscanf(buffer, "%f ", &a[x]);
            pos = strchr(buffer, space);
            removeSubstring(start, pos);
            x++;
            }

    printf("Saved input: ");
    while(y<BUFFERSIZE && a[y] != EMPTY){
            printf("%.2f", a[y]);
            y++;
            }

    printf("\n");

    return 0;
}

编辑:增加两个数组大小并删除feof

1 个答案:

答案 0 :(得分:1)

问题几乎肯定在pos = strchr(buffer, space);行。如果输入不包含空格字符,则将pos设置为NULL。将NULL传递给strstr()可能会导致SEGV。