终端在我的小程序上崩溃了

时间:2014-01-10 17:15:45

标签: c codeblocks

当我尝试执行这个小程序时,我的终端崩溃,我不知道为什么!有人可以帮帮我吗? =)问题在于。我的colpiler(代码:块)没有说任何O_o只是一个警告,但没有错误。

#include<stdio.h>
#include<stdlib.h>
#define mxl 30

typedef struct inc{
int ora;
char desc[mxl];
} incluso;

typedef struct dati {
char data[mxl];
int n_a;
incluso *a;
} agenda;

int main(){
FILE *f;
agenda *p;
int i,orai,oraf;
char c, datar[mxl],nomefile[mxl],datapp[mxl];

printf("Inserisci il nome del file: ");
scanf("%s",&nomefile);

f=fopen(nomefile,"r");
if(f==NULL){
    printf("Impossibile aprire il file!");
    exit(1);
    }
    else{
    printf("Inserisci data, ora inizio ed ora fine nel formato gg/mm hh hh: ");
    scanf("%s %d %d",datar, orai,oraf);

    while((c=getc(f))!=EOF){
        if(fscanf(f,"%s",&datapp)==datar){
        fscanf(f,"%s",&p->data);
        fscanf(f,"%d",&p->n_a);
        p->a=(incluso*)malloc(p->n_a*sizeof(incluso));
        for(i=0;i<p->n_a;i++){
                fscanf(f,"%d",&p->a[i].ora);
                fscanf(f,"%s",&p->a[i].desc);
            }
        }
    }

    for(i<0;i<p->n_a;i++){
        if(p->a[i].ora>orai && p->a[i].ora<oraf )
            printf("%s %d %s", p->data, p->a[i].ora, p->a[i].desc);
    }

    free(p->a);
    fclose(f);
    }
}

2 个答案:

答案 0 :(得分:1)

除了BLUEPIXY已经提到过的内容:

scanf("%s",&nomefile);

应该是

scanf("%s",nomefile);

因为nomefile是一个数组并且已经缩减为指针。

if(fscanf(f,"%s",&datapp)==datar){

同样在这里。它应该是:

if(fscanf(f,"%s",datapp)==datar){

另外你想在这里比较一下?左侧是int,右侧是char*。如果你想比较你必须在额外的行和strcmp中进行的字符串:(你还需要#include <string.h>

fscanf(f,"%s",datapp);
if(strcmp(datapp, datar) == 0){

再次出现同样的问题:

                fscanf(f,"%s",&p->a[i].desc);

应该是

                fscanf(f,"%s",p->a[i].desc);

在这里你可能有一个错字:

 for(i<0;i<p->n_a;i++){

应该是

 for(i=0;i<p->n_a;i++){

激活所有警告(-Wall -Wextra)gcc警告我这些警告。

另外(但没有警告)您反复分配p->a。这应该只在循环之前完成一次。不要忘记释放p

答案 1 :(得分:0)

我注意到的问题如下......

变化

scanf("%s %d %d",datar, orai,oraf);

scanf("%s %d %d",datar, &orai, &oraf);

fscanf(f,"%s",&p->data);

p = malloc(sizeof(*p));
...
fscanf(f,"%s", p->data);

ADD

if(fscanf(f,"%s",&datapp)==datar){

可能

if(fscanf(f, "%s", datapp)==1){