22/07/12 14:58
nessuno
Devi fornire tutto il codice per capire cosa non va. Se non è possibile compilarlo, come si prova?
Mancano tutte le dichiarazioni delle variabili ...
Posta tutto il main e dicci come si dovrebbe usare e in quali condizioni hai avuto l'errore.
Mancano tutte le dichiarazioni delle variabili ...
Posta tutto il main e dicci come si dovrebbe usare e in quali condizioni hai avuto l'errore.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
22/07/12 15:09
Umberto
certo scusa :
Errore se :
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[]){ char vname[1000][1000]; char var[1000][1000]; char fname[1000][1000]; char fun[1000][1000]; char elecom[1000]; char eldo[100]; int ifun = 0; int tfun = 0; int ivar = 0; int ivar1=0; int iargv = 0; int iargv1 = 0; int tvar = 0; int tvar1; int iargv2 = 0; int point = 0; int mate1 = 0; int mate2 = 0; int materes = 0; int inf = 0; int fori; normalgo: while (inf==0){ tvar = 0; iargv=iargv+1; if(strcmp(argv[iargv],"end")==0){ goto endgo; } /*if(strcmp(argv[iargv],"mate")==0){ iargv = iargv + 1; if(strcmp(argv[iargv],"%")==0){ } else { } }*/ if(strcmp(argv[iargv],"dif")==0){ iargv=iargv+1; stpcpy(fname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(fun[ivar],argv[iargv1]); ifun=ifun+1; iargv = iargv1; } if(strcmp(argv[iargv],"fun")==0){ iargv++; while(strcmp(argv[iargv],fname[tfun])!=0){ tfun++; } //printf("%s", fun[tfun]); strcpy(elecom,"base"); strcpy(elecom,fun[tfun]); iargv++; strcat(elecom, argv[iargv]); system(elecom); } if(strcmp(argv[iargv],"var")==0){ iargv=iargv+1; stpcpy(vname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(var[ivar],argv[iargv1]); ivar1=ivar+1; iargv = iargv1; //printf("%s\n",vname[ivar]); //printf("%s\n",var[ivar]); } if(strcmp(argv[iargv],"echo")==0){ //printf("in"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } printf("%s\n",var[tvar]); } else { printf("%s\n", argv[iargv]); } } if(strcmp(argv[iargv],"kin")==0){ printf("\n"); tvar1 = 0; iargv++; while(strcmp(argv[iargv],vname[tvar])){ tvar1++; } scanf("%s",var[tvar1]); } if(strcmp(argv[iargv],"write")==0){ FILE *fp; iargv++; fp = fopen(argv[iargv],"w+"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } fprintf(fp,"%s",var[tvar]); } else { fprintf(fp,"%s",argv[iargv]); } } if(strcmp(argv[iargv],"sys")==0){ iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } system(var[tvar]); } else { system(argv[iargv]); } } if(strcmp(argv[iargv],"read")==0){ //printf("in"); iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; point = atoi(argv[iargv]); iargv++; FILE *read = fopen(argv[iargv],"r"); fgets(var[tvar],point,read); } if(strcmp(argv[iargv],"cond")==0){ printf("cond"); iargv= iargv + 1; /* quando tento di eseguire Program received signal SIGSEGV, Segmentation fault. 0x0024d01b in ?? () from /lib/i386-linux-gnu/libc.so.6 */ if(strcmp(argv[iargv],"%")==0){ //printf("varone"); iargv++; if(strcmp(argv[iargv],"==")==0){ while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; for(fori = 0;strcmp(argv[iargv],vname[fori])!=0;fori++){ } if(strcmp(var[tvar],var[fori])==0){ goto ifgo; } else{ iargv++; while(strcmp(argv[iargv],"done")!=0){ iargv++; } } } } //OK if(strcmp(argv[iargv],"$")==0){ //printf("notvarone"); iargv++; if(strcmp(argv[iargv],"==")==0){ iargv++; //printf("in1"); while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; if(strcmp(var[tvar],argv[iargv])==0){ goto ifgo; } else{ iargv++; while(strcmp(argv[iargv],"done")!=0){ iargv++; } } } } } } ifgo: while (inf==0){ tvar = 0; iargv=iargv+1; /*if(strcmp(argv[iargv],"mate")==0){ iargv = iargv + 1; if(strcmp(argv[iargv],"%")==0){ } else { } }*/ /*if(strcmp(argv[iargv],"div")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; ptr = getevn(argv[iargv]); } */ if(strcmp(argv[iargv],"dif")==0){ iargv=iargv+1; stpcpy(fname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(fun[ivar],argv[iargv1]); ifun=ifun+1; iargv = iargv1; } if(strcmp(argv[iargv],"fun")==0){ iargv++; while(strcmp(argv[iargv],fname[tfun])!=0){ tfun++; } //printf("%s", fun[tfun]); strcpy(elecom,"base"); strcpy(elecom,fun[tfun]); iargv++; strcat(elecom, argv[iargv]); system(elecom); } if(strcmp(argv[iargv],"var")==0){ iargv=iargv+1; stpcpy(vname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(var[ivar],argv[iargv1]); ivar1=ivar+1; iargv = iargv1; //printf("%s\n",vname[ivar]); //printf("%s\n",var[ivar]); } if(strcmp(argv[iargv],"echo")==0){ //printf("in"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } printf("%s\n",var[tvar]); } else { printf("%s\n", argv[iargv]); } } if(strcmp(argv[iargv],"kin")==0){ printf("\n"); tvar1 = 0; iargv++; while(strcmp(argv[iargv],vname[tvar])){ tvar1++; } scanf("%s",var[tvar1]); } if(strcmp(argv[iargv],"write")==0){ FILE *fp; iargv++; fp = fopen(argv[iargv],"w+"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } fprintf(fp,"%s",var[tvar]); } else { fprintf(fp,"%s",argv[iargv]); } } if(strcmp(argv[iargv],"sys")==0){ iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } system(var[tvar]); } else { system(argv[iargv]); } } if(strcmp(argv[iargv],"read")==0){ //printf("in"); iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; point = atoi(argv[iargv]); iargv++; FILE *read = fopen(argv[iargv],"r"); fgets(var[tvar],point,read); } if(strcmp(argv[iargv],"done")==0){ goto normalgo; } if(strcmp(argv[iargv],"cond")==0){ iargv++; if(strcmp(argv[iargv],"%")==0){ } if(strcmp(argv[iargv],"$")==0){ iargv++; if(strcmp(argv[iargv],"==")==0){ iargv++; //printf("in1"); while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; if(strcmp(var[tvar],argv[iargv])==0){ goto ifgo; } } } } } endgo: printf("%s\n",argv[1]); return 0; }
Errore se :
./main Fine var a b var b b cond % == a b echo hello done end
aaa
22/07/12 15:48
nessuno
Il problema sta nel ciclo
che non si conclude mai. Ovviamente, aumentando sempre tvar, finisci per andare oltre il valore massimo di 1000 e sfondare in memoria ...
Inoltre, esistono delle chiamate a stpcpy ovviamente sbagliate (devono essere strcpy ... come fa a compilare?).
E infine tutti quegli array sfondano lo stack ... dovrebbero essere allocate staticamente fuori dal main o dinamicamente.
P.S. Per fare analisi sintattica ci sono regole precise e algoritmi standard ... facendo un codice del genere - che addirittura usa dei goto - potresti avere tantissimi problemi.
while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; }
che non si conclude mai. Ovviamente, aumentando sempre tvar, finisci per andare oltre il valore massimo di 1000 e sfondare in memoria ...
Inoltre, esistono delle chiamate a stpcpy ovviamente sbagliate (devono essere strcpy ... come fa a compilare?).
E infine tutti quegli array sfondano lo stack ... dovrebbero essere allocate staticamente fuori dal main o dinamicamente.
P.S. Per fare analisi sintattica ci sono regole precise e algoritmi standard ... facendo un codice del genere - che addirittura usa dei goto - potresti avere tantissimi problemi.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
22/07/12 16:09
Umberto
io ho ricompilato il programma per non fare andare al infinito il while e sfondare la memoria ma l' errore persiste.
aaa
22/07/12 16:11
nessuno
Scusa Umberto ma se scrivi solamente questo non so cosa dirti.
Ovviamente devi dire come hai modificato il codice ...
Ovviamente devi dire come hai modificato il codice ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
22/07/12 16:15
Umberto
ho incrementato la variabile iargv
#include <stdio.h> #include <string.h> #include <stdlib.h> char vname[1000][1000]; char var[1000][1000]; char fname[1000][1000]; char fun[1000][1000]; char elecom[1000]; char eldo[100]; int ifun = 0; int tfun = 0; int ivar = 0; int ivar1=0; int iargv = 0; int iargv1 = 0; int tvar = 0; int tvar1; int iargv2 = 0; int point = 0; int mate1 = 0; int mate2 = 0; int materes = 0; int inf = 0; int fori; int main(int argc,char *argv[]){ normalgo: while (inf==0){ tvar = 0; iargv=iargv+1; if(strcmp(argv[iargv],"end")==0){ goto endgo; } /*if(strcmp(argv[iargv],"mate")==0){ iargv = iargv + 1; if(strcmp(argv[iargv],"%")==0){ } else { } }*/ if(strcmp(argv[iargv],"dif")==0){ iargv=iargv+1; stpcpy(fname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(fun[ivar],argv[iargv1]); ifun=ifun+1; iargv = iargv1; } if(strcmp(argv[iargv],"fun")==0){ iargv++; while(strcmp(argv[iargv],fname[tfun])!=0){ tfun++; } //printf("%s", fun[tfun]); strcpy(elecom,"base"); strcpy(elecom,fun[tfun]); iargv++; strcat(elecom, argv[iargv]); system(elecom); } if(strcmp(argv[iargv],"var")==0){ iargv=iargv+1; stpcpy(vname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(var[ivar],argv[iargv1]); ivar1=ivar+1; iargv = iargv1; //printf("%s\n",vname[ivar]); //printf("%s\n",var[ivar]); } if(strcmp(argv[iargv],"echo")==0){ //printf("in"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } printf("%s\n",var[tvar]); } else { printf("%s\n", argv[iargv]); } } if(strcmp(argv[iargv],"kin")==0){ printf("\n"); tvar1 = 0; iargv++; while(strcmp(argv[iargv],vname[tvar])){ tvar1++; } scanf("%s",var[tvar1]); } if(strcmp(argv[iargv],"write")==0){ FILE *fp; iargv++; fp = fopen(argv[iargv],"w+"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } fprintf(fp,"%s",var[tvar]); } else { fprintf(fp,"%s",argv[iargv]); } } if(strcmp(argv[iargv],"sys")==0){ iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } system(var[tvar]); } else { system(argv[iargv]); } } if(strcmp(argv[iargv],"read")==0){ //printf("in"); iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; point = atoi(argv[iargv]); iargv++; FILE *read = fopen(argv[iargv],"r"); fgets(var[tvar],point,read); } if(strcmp(argv[iargv],"cond")==0){ printf("cond"); iargv= iargv + 1; /* quando tento di eseguire Program received signal SIGSEGV, Segmentation fault. 0x0024d01b in ?? () from /lib/i386-linux-gnu/libc.so.6 */ if(strcmp(argv[iargv],"%")==0){ //printf("varone"); iargv++; if(strcmp(argv[iargv],"==")==0){ iargv++; for(tvar = 0;strcmp(argv[iargv],vname[tvar])!=0;tvar++){ } iargv++; for(fori = 0;strcmp(argv[iargv],vname[fori])!=0;fori++){ } if(strcmp(var[tvar],var[fori])==0){ goto ifgo; } else{ iargv++; while(strcmp(argv[iargv],"done")!=0){ iargv++; } } } } //OK if(strcmp(argv[iargv],"$")==0){ //printf("notvarone"); iargv++; if(strcmp(argv[iargv],"==")==0){ iargv++; //printf("in1"); while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; if(strcmp(var[tvar],argv[iargv])==0){ goto ifgo; } else{ iargv++; while(strcmp(argv[iargv],"done")!=0){ iargv++; } } } } } } ifgo: while (inf==0){ tvar = 0; iargv=iargv+1; /*if(strcmp(argv[iargv],"mate")==0){ iargv = iargv + 1; if(strcmp(argv[iargv],"%")==0){ } else { } }*/ /*if(strcmp(argv[iargv],"div")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; ptr = getevn(argv[iargv]); } */ if(strcmp(argv[iargv],"dif")==0){ iargv=iargv+1; stpcpy(fname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(fun[ivar],argv[iargv1]); ifun=ifun+1; iargv = iargv1; } if(strcmp(argv[iargv],"fun")==0){ iargv++; while(strcmp(argv[iargv],fname[tfun])!=0){ tfun++; } //printf("%s", fun[tfun]); strcpy(elecom,"base"); strcpy(elecom,fun[tfun]); iargv++; strcat(elecom, argv[iargv]); system(elecom); } if(strcmp(argv[iargv],"var")==0){ iargv=iargv+1; stpcpy(vname[ivar],argv[iargv]); iargv1=iargv+1; stpcpy(var[ivar],argv[iargv1]); ivar1=ivar+1; iargv = iargv1; //printf("%s\n",vname[ivar]); //printf("%s\n",var[ivar]); } if(strcmp(argv[iargv],"echo")==0){ //printf("in"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } printf("%s\n",var[tvar]); } else { printf("%s\n", argv[iargv]); } } if(strcmp(argv[iargv],"kin")==0){ printf("\n"); tvar1 = 0; iargv++; while(strcmp(argv[iargv],vname[tvar])){ tvar1++; } scanf("%s",var[tvar1]); } if(strcmp(argv[iargv],"write")==0){ FILE *fp; iargv++; fp = fopen(argv[iargv],"w+"); iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } fprintf(fp,"%s",var[tvar]); } else { fprintf(fp,"%s",argv[iargv]); } } if(strcmp(argv[iargv],"sys")==0){ iargv++; if (strcmp(argv[iargv],"%")==0){ iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } system(var[tvar]); } else { system(argv[iargv]); } } if(strcmp(argv[iargv],"read")==0){ //printf("in"); iargv++; while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; point = atoi(argv[iargv]); iargv++; FILE *read = fopen(argv[iargv],"r"); fgets(var[tvar],point,read); } if(strcmp(argv[iargv],"done")==0){ goto normalgo; } if(strcmp(argv[iargv],"cond")==0){ iargv++; if(strcmp(argv[iargv],"%")==0){ } if(strcmp(argv[iargv],"$")==0){ iargv++; if(strcmp(argv[iargv],"==")==0){ iargv++; //printf("in1"); while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; } iargv++; if(strcmp(var[tvar],argv[iargv])==0){ goto ifgo; } } } } } endgo: printf("%s\n",argv[1]); return 0; }
Ultima modifica effettuata da Umberto 22/07/12 16:15
aaa
22/07/12 16:21
nessuno
Ma che vuoi dire?
Il ciclo
è lo stesso ... e quindi è ovvio che hai sempre l'errore ...
Il ciclo
while(strcmp(argv[iargv],vname[tvar])!=0){ tvar++; }
è lo stesso ... e quindi è ovvio che hai sempre l'errore ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.