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



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

我拿着这个,跑得很好。

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%sn",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 failedn");
    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%sn", line);
    fclose(fileB);
    //free(entries);
    return 0;
}

这就是的问题

strcat(prevStringTemp, c);

beacause strcat()需要以nul结尾的字符串,在您的情况下,这些字符串与参数无关。

您的c阵列应该是

char c[2] = {0};

以及这些的第一个元素

char prevStringTemp[60];
char postStringTemp[150];
char magStringTemp[10];

应该初始化为'',就像这个

prevStringTemp[0] = '';
postStringTemp[0] = '';
magStringTemp[0]  = '';

修复此问题后,strcat()将按照您的预期运行。

相关内容

  • 没有找到相关文章

最新更新