C 初始化结构时出现分段错误

C 初始化结构时出现分段错误,c,gcc,struct,segmentation-fault,C,Gcc,Struct,Segmentation Fault,我很难弄清楚为什么我会在较长的代码段中遇到分段错误 我拿着这个,运行得很好 struct Earthquake { char *prevString; char *magString; char *postString; }; int main(void) { struct Earthquake eq; eq.prevString="PREVIOUS STRING"; eq.magString = "50

我很难弄清楚为什么我会在较长的代码段中遇到分段错误

我拿着这个,运行得很好

struct Earthquake
    {
        char *prevString;
        char *magString;
        char *postString;
    };  
int main(void)
{
    struct Earthquake eq;
    eq.prevString="PREVIOUS STRING";
    eq.magString = "50";
    eq.postString = "POST STRING";

    printf("\n%s",eq.prevString);
    printf("\n%s",eq.magString);
    printf("\n%s\n",eq.postString);
}
当我试着运行它时,我得到了一个分段错误,如果我注释掉结构初始化,我就不会得到这个错误。你也许能从我的评论中看出,但一旦我开始工作,我就试图制作一个结构数组,在这个点上我知道eq需要是地震指针,但我甚至不能让它工作

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#include <stddef.h>
//#include <paths.h>

struct Earthquake
{
    char *prevString;
    char *magString;
    char *postString;
};


int main()
{
    int numLines = 0;
    FILE *fileA = fopen("./all_month.csv", "r");
    char c[1];

    do
    {
        *c = fgetc(fileA);
        //printf("%c", c);

    }while(*c != '\n');

    do
    {
        *c = fgetc(fileA);
        //printf("%c", c);
        if(*c == '\n')
        {
            numLines++;
        }

    }while(*c != EOF);

    //printf("%d",numLines);
    fclose(fileA);
    FILE *fileB = fopen("./all_month.csv", "r");
    char prevStringTemp[60];
    char postStringTemp[150];
    char magStringTemp[10];

    struct Earthquake eq; 
    //if(NULL == (entries = (Earthquake *)malloc(sizeof(Earthquake) * numLines)));
    //printf("\nmalloc failed\n");

    do
    {
        *c = fgetc(fileB);
        //printf("%c", c);

    }while(*c != '\n');
    char line[200];
    int commaCount = 0;
    do{
        *c = fgetc(fileB);
        if(*c==',')
        {
            commaCount++;
            //printf("\n%d", commaCount);
        }
        strcat(prevStringTemp, c);
    }while(commaCount<4);

    do
    {
        *c = fgetc(fileB);
        strcat(magStringTemp, c);
    }while(*c!=',');

    do
    {
        *c = fgetc(fileB);
        strcat(postStringTemp, c);
    }while(*c!='\n');

    //strcpy(entries[0].prevString, prevString);
    //printf(entries[0].prevString);

    //fscanf(fileB,"%s",line);

    //printf("\n%s\n", line);
    fclose(fileB);
    //free(entries);
    return 0;
}
#包括
#包括
#包括
//#包括
//#包括
结构地震
{
字符*前置字符串;
char*magString;
char*postString;
};
int main()
{
int numLines=0;
文件*fileA=fopen(“./all_month.csv”,“r”);
charc[1];
做
{
*c=fgetc(文件A);
//printf(“%c”,c);
}而(*c!='\n');
做
{
*c=fgetc(文件A);
//printf(“%c”,c);
如果(*c=='\n')
{
numLines++;
}
}而(*c!=EOF);
//printf(“%d”,numLines);
fclose(fileA);
FILE*fileB=fopen(“./all_month.csv”,“r”);
char prevStringTemp[60];
字符postStringTemp[150];
char-magStringTemp[10];
结构地震方程;
//如果(NULL==(条目=(地震*)malloc(sizeof(地震)*numLines));
//printf(“\nAlloc失败\n”);
做
{
*c=fgetc(文件B);
//printf(“%c”,c);
}而(*c!='\n');
字符行[200];
int commaCount=0;
做{
*c=fgetc(文件B);
如果(*c==',')
{
commaCount++;
//printf(“\n%d”,commaCount);
}
strcat(preverstringtemp,c);
}而(commaCount这就是问题所在

strcat(prevStringTemp, c);
因为strcat()
需要
num
终止的字符串,这些字符串中的参数与您的情况相同

您的
c
数组应该是

char c[2] = {0};
第一个元素是什么

char prevStringTemp[60];
char postStringTemp[150];
char magStringTemp[10];
应该初始化为
'\0'
,如下所示

prevStringTemp[0] = '\0';
postStringTemp[0] = '\0';
magStringTemp[0]  = '\0';
修复此问题后,
strcat()
将按照您的预期运行。

始终检查
fopen()
是否未返回
NULL