Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Segmentation fault , errore non identificato dalla gdb
Forum - C/C++ - Segmentation fault , errore non identificato dalla gdb

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 16:15
Domenica, 22/07/2012
la shell mi da segmentation fault se eseguo questo codice
Codice sorgente - presumibilmente C/C++

  1. if(strcmp(argv[iargv],"cond")==0){
  2.                 printf("cond");
  3.                 iargv= iargv + 1;
  4.                 if(strcmp(argv[iargv],"%")==0){
  5.                         //printf("varone");
  6.                         iargv++;
  7.                         if(strcmp(argv[iargv],"==")==0){
  8.                                 while(strcmp(argv[iargv],vname[tvar])!=0){
  9.                                                 tvar++;
  10.                                 }
  11.                                 iargv++;
  12.                                 for(fori = 0;strcmp(argv[iargv],vname[fori])!=0;fori++){
  13.                                 }
  14.                                 if(strcmp(var[tvar],var[fori])==0){
  15.                                                 goto ifgo;
  16.                                 }
  17.                                 else{
  18.                                         iargv++;
  19.                                         while(strcmp(argv[iargv],"done")!=0){
  20.                                                 iargv++;
  21.                                         }
  22.                                 }
  23.                         }
  24.  
  25.                 }


la gdb mi dice:
Codice sorgente - presumibilmente C/C++

  1. Program received signal SIGSEGV, Segmentation fault.
  2. 0x0024d01b in ?? () from /lib/i386-linux-gnu/libc.so.6


:-?

Ultima modifica effettuata da Umberto il 22/07/2012 alle 16:15
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:58
Domenica, 22/07/2012
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.



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à.
PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 17:09
Domenica, 22/07/2012
certo scusa :
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int main(int argc,char *argv[]){
  5.         char vname[1000][1000];
  6.         char var[1000][1000];
  7.         char fname[1000][1000];
  8.         char fun[1000][1000];
  9.         char elecom[1000];
  10.         char eldo[100];
  11.         int ifun = 0;
  12.         int tfun = 0;
  13.         int ivar = 0;
  14.         int ivar1=0;
  15.         int iargv = 0;
  16.         int iargv1 = 0;
  17.         int tvar = 0;
  18.         int tvar1;
  19.         int iargv2 = 0;
  20.         int point = 0;
  21.         int mate1 = 0;
  22.         int mate2 = 0;
  23.         int materes = 0;
  24.         int inf = 0;
  25.         int fori;
  26.         normalgo:
  27.         while (inf==0){
  28.         tvar = 0;
  29.         iargv=iargv+1;
  30.         if(strcmp(argv[iargv],"end")==0){
  31.                 goto endgo;
  32.         }
  33.         /*if(strcmp(argv[iargv],"mate")==0){
  34.                 iargv = iargv + 1;
  35.                 if(strcmp(argv[iargv],"%")==0){
  36.                 }
  37.                 else {
  38.                 }
  39.         }*/
  40.        
  41.         if(strcmp(argv[iargv],"dif")==0){
  42.  
  43.                 iargv=iargv+1;
  44.                 stpcpy(fname[ivar],argv[iargv]);
  45.                 iargv1=iargv+1;
  46.                 stpcpy(fun[ivar],argv[iargv1]);
  47.                 ifun=ifun+1;
  48.                 iargv = iargv1;
  49.  
  50.                 }
  51.         if(strcmp(argv[iargv],"fun")==0){
  52.  
  53.                 iargv++;
  54.                 while(strcmp(argv[iargv],fname[tfun])!=0){
  55.                                 tfun++;
  56.                 }
  57.                 //printf("%s", fun[tfun]);
  58.                 strcpy(elecom,"base");
  59.                 strcpy(elecom,fun[tfun]);
  60.                 iargv++;
  61.                 strcat(elecom, argv[iargv]);
  62.                 system(elecom);                
  63.                 }
  64.         if(strcmp(argv[iargv],"var")==0){
  65.                
  66.                 iargv=iargv+1;
  67.                 stpcpy(vname[ivar],argv[iargv]);
  68.                 iargv1=iargv+1;
  69.                 stpcpy(var[ivar],argv[iargv1]);
  70.                 ivar1=ivar+1;
  71.                 iargv = iargv1;
  72.                
  73.                 //printf("%s\n",vname[ivar]);
  74.                 //printf("%s\n",var[ivar]);
  75.                 }
  76.         if(strcmp(argv[iargv],"echo")==0){
  77.                
  78.                 //printf("in");
  79.                 iargv++;
  80.                 if (strcmp(argv[iargv],"%")==0){
  81.                
  82.                         iargv++;
  83.                         while(strcmp(argv[iargv],vname[tvar])!=0){
  84.                                 tvar++;
  85.                         }
  86.                 printf("%s\n",var[tvar]);
  87.  
  88.                 }
  89.                 else {
  90.                         printf("%s\n", argv[iargv]);
  91.                 }
  92.                 }
  93.         if(strcmp(argv[iargv],"kin")==0){
  94.                 printf("\n");
  95.                 tvar1 = 0;
  96.                 iargv++;
  97.                 while(strcmp(argv[iargv],vname[tvar])){
  98.  
  99.                                 tvar1++;
  100.                                
  101.                         }
  102.                
  103.                 scanf("%s",var[tvar1]);
  104.         }
  105.         if(strcmp(argv[iargv],"write")==0){
  106.                
  107.                 FILE *fp;
  108.                 iargv++;
  109.                 fp = fopen(argv[iargv],"w+");
  110.                 iargv++;
  111.                 if (strcmp(argv[iargv],"%")==0){
  112.                 iargv++;
  113.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  114.                                 tvar++;
  115.                         }
  116.                 fprintf(fp,"%s",var[tvar]);
  117.                 }
  118.                 else {
  119.                         fprintf(fp,"%s",argv[iargv]);
  120.                 }
  121.         }
  122.         if(strcmp(argv[iargv],"sys")==0){
  123.                 iargv++;
  124.                 if (strcmp(argv[iargv],"%")==0){
  125.                 iargv++;
  126.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  127.                                 tvar++;
  128.                         }
  129.                 system(var[tvar]);
  130.                 }
  131.                 else {
  132.                         system(argv[iargv]);
  133.                 }
  134.         }
  135.         if(strcmp(argv[iargv],"read")==0){
  136.                
  137.                 //printf("in");
  138.                 iargv++;
  139.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  140.                                 tvar++;
  141.                         }
  142.                 iargv++;
  143.                 point = atoi(argv[iargv]);
  144.                 iargv++;
  145.                 FILE *read = fopen(argv[iargv],"r");
  146.                 fgets(var[tvar],point,read);
  147.                 }
  148.         if(strcmp(argv[iargv],"cond")==0){
  149.                 printf("cond");
  150.                 iargv= iargv + 1;
  151.                 /* quando tento di eseguire
  152.                         Program received signal SIGSEGV, Segmentation fault.
  153.                         0x0024d01b in ?? () from /lib/i386-linux-gnu/libc.so.6
  154.                 */
  155.                 if(strcmp(argv[iargv],"%")==0){
  156.                         //printf("varone");
  157.                         iargv++;
  158.                         if(strcmp(argv[iargv],"==")==0){
  159.                                 while(strcmp(argv[iargv],vname[tvar])!=0){
  160.                                                 tvar++;
  161.                                 }
  162.                                 iargv++;
  163.                                 for(fori = 0;strcmp(argv[iargv],vname[fori])!=0;fori++){
  164.                                 }
  165.                                 if(strcmp(var[tvar],var[fori])==0){
  166.                                                 goto ifgo;
  167.                                 }
  168.                                 else{
  169.                                         iargv++;
  170.                                         while(strcmp(argv[iargv],"done")!=0){
  171.                                                 iargv++;
  172.                                         }
  173.                                 }
  174.                         }
  175.  
  176.                 }
  177.                 //OK
  178.                 if(strcmp(argv[iargv],"$")==0){
  179.                         //printf("notvarone");
  180.                         iargv++;
  181.                         if(strcmp(argv[iargv],"==")==0){
  182.                                 iargv++;
  183.                                 //printf("in1");
  184.                                 while(strcmp(argv[iargv],vname[tvar])!=0){
  185.                                         tvar++;
  186.                                 }
  187.                                 iargv++;
  188.                                 if(strcmp(var[tvar],argv[iargv])==0){
  189.                                                 goto ifgo;
  190.                                 }
  191.                                 else{
  192.                                 iargv++;
  193.                                 while(strcmp(argv[iargv],"done")!=0){
  194.                                                 iargv++;
  195.                                                 }
  196.                                 }
  197.                         }
  198.                 }              
  199.  
  200.         }
  201. }
  202. ifgo:
  203. while (inf==0){
  204.         tvar = 0;
  205.         iargv=iargv+1;
  206.         /*if(strcmp(argv[iargv],"mate")==0){
  207.                 iargv = iargv + 1;
  208.                 if(strcmp(argv[iargv],"%")==0){
  209.                 }
  210.                 else {
  211.                 }
  212.         }*/
  213.         /*if(strcmp(argv[iargv],"div")==0){
  214.  
  215.                 iargv++;
  216.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  217.                                 tvar++;
  218.                 }
  219.                 iargv++;
  220.                 ptr = getevn(argv[iargv]);
  221.                 }
  222.         */
  223.         if(strcmp(argv[iargv],"dif")==0){
  224.  
  225.                 iargv=iargv+1;
  226.                 stpcpy(fname[ivar],argv[iargv]);
  227.                 iargv1=iargv+1;
  228.                 stpcpy(fun[ivar],argv[iargv1]);
  229.                 ifun=ifun+1;
  230.                 iargv = iargv1;
  231.  
  232.                 }
  233.         if(strcmp(argv[iargv],"fun")==0){
  234.  
  235.                 iargv++;
  236.                 while(strcmp(argv[iargv],fname[tfun])!=0){
  237.                                 tfun++;
  238.                 }
  239.                 //printf("%s", fun[tfun]);
  240.                 strcpy(elecom,"base");
  241.                 strcpy(elecom,fun[tfun]);
  242.                 iargv++;
  243.                 strcat(elecom, argv[iargv]);
  244.                 system(elecom);                
  245.                 }
  246.         if(strcmp(argv[iargv],"var")==0){
  247.                
  248.                 iargv=iargv+1;
  249.                 stpcpy(vname[ivar],argv[iargv]);
  250.                 iargv1=iargv+1;
  251.                 stpcpy(var[ivar],argv[iargv1]);
  252.                 ivar1=ivar+1;
  253.                 iargv = iargv1;
  254.                
  255.                 //printf("%s\n",vname[ivar]);
  256.                 //printf("%s\n",var[ivar]);
  257.                 }
  258.         if(strcmp(argv[iargv],"echo")==0){
  259.                
  260.                 //printf("in");
  261.                 iargv++;
  262.                 if (strcmp(argv[iargv],"%")==0){
  263.                
  264.                         iargv++;
  265.                         while(strcmp(argv[iargv],vname[tvar])!=0){
  266.                                 tvar++;
  267.                         }
  268.                 printf("%s\n",var[tvar]);
  269.  
  270.                 }
  271.                 else {
  272.                         printf("%s\n", argv[iargv]);
  273.                 }
  274.                 }
  275.         if(strcmp(argv[iargv],"kin")==0){
  276.                 printf("\n");
  277.                 tvar1 = 0;
  278.                 iargv++;
  279.                 while(strcmp(argv[iargv],vname[tvar])){
  280.  
  281.                                 tvar1++;
  282.                                
  283.                         }
  284.                
  285.                 scanf("%s",var[tvar1]);
  286.         }
  287.         if(strcmp(argv[iargv],"write")==0){
  288.                
  289.                 FILE *fp;
  290.                 iargv++;
  291.                 fp = fopen(argv[iargv],"w+");
  292.                 iargv++;
  293.                 if (strcmp(argv[iargv],"%")==0){
  294.                 iargv++;
  295.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  296.                                 tvar++;
  297.                         }
  298.                 fprintf(fp,"%s",var[tvar]);
  299.                 }
  300.                 else {
  301.                         fprintf(fp,"%s",argv[iargv]);
  302.                 }
  303.         }
  304.         if(strcmp(argv[iargv],"sys")==0){
  305.                 iargv++;
  306.                 if (strcmp(argv[iargv],"%")==0){
  307.                 iargv++;
  308.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  309.                                 tvar++;
  310.                         }
  311.                 system(var[tvar]);
  312.                 }
  313.                 else {
  314.                         system(argv[iargv]);
  315.                 }
  316.         }
  317.         if(strcmp(argv[iargv],"read")==0){
  318.                
  319.                 //printf("in");
  320.                 iargv++;
  321.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  322.                                 tvar++;
  323.                         }
  324.                 iargv++;
  325.                 point = atoi(argv[iargv]);
  326.                 iargv++;
  327.                 FILE *read = fopen(argv[iargv],"r");
  328.                 fgets(var[tvar],point,read);
  329.                 }
  330.         if(strcmp(argv[iargv],"done")==0){
  331.                         goto normalgo;
  332.         }
  333.         if(strcmp(argv[iargv],"cond")==0){
  334.                 iargv++;
  335.                 if(strcmp(argv[iargv],"%")==0){
  336.  
  337.                 }
  338.                 if(strcmp(argv[iargv],"$")==0){
  339.                         iargv++;
  340.                         if(strcmp(argv[iargv],"==")==0){
  341.                                 iargv++;
  342.                                 //printf("in1");
  343.                                 while(strcmp(argv[iargv],vname[tvar])!=0){
  344.                                         tvar++;
  345.                                 }
  346.                                 iargv++;
  347.                                 if(strcmp(var[tvar],argv[iargv])==0){
  348.                                                 goto ifgo;
  349.                                 }
  350.                         }
  351.                 }              
  352.  
  353.         }
  354. }
  355. endgo:
  356. printf("%s\n",argv[1]);
  357. return 0;
  358. }


Errore se :
Codice sorgente - presumibilmente C/C++

  1. ./main Fine var a b var b b cond % ==  a b echo hello done end


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:48
Domenica, 22/07/2012
Il problema sta nel ciclo

Codice sorgente - presumibilmente Plain Text

  1. while(strcmp(argv[iargv],vname[tvar])!=0){
  2.                                                 tvar++;
  3.                                 }



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à.
PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 18:09
Domenica, 22/07/2012
io ho ricompilato il programma per non fare andare al infinito il while e sfondare la memoria ma l' errore persiste.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:11
Domenica, 22/07/2012
Scusa Umberto ma se scrivi solamente questo non so cosa dirti.

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à.
PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 18:15
Domenica, 22/07/2012
ho incrementato la variabile iargv
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. char vname[1000][1000];
  5. char var[1000][1000];
  6. char fname[1000][1000];
  7. char fun[1000][1000];
  8. char elecom[1000];
  9. char eldo[100];
  10. int ifun = 0;
  11. int tfun = 0;
  12. int ivar = 0;
  13. int ivar1=0;
  14. int iargv = 0;
  15. int iargv1 = 0;
  16. int tvar = 0;
  17. int tvar1;
  18. int iargv2 = 0;
  19. int point = 0;
  20. int mate1 = 0;
  21. int mate2 = 0;
  22. int materes = 0;
  23. int inf = 0;
  24. int fori;
  25. int main(int argc,char *argv[]){
  26.         normalgo:
  27.         while (inf==0){
  28.         tvar = 0;
  29.         iargv=iargv+1;
  30.         if(strcmp(argv[iargv],"end")==0){
  31.                 goto endgo;
  32.         }
  33.         /*if(strcmp(argv[iargv],"mate")==0){
  34.                 iargv = iargv + 1;
  35.                 if(strcmp(argv[iargv],"%")==0){
  36.                 }
  37.                 else {
  38.                 }
  39.         }*/
  40.        
  41.         if(strcmp(argv[iargv],"dif")==0){
  42.  
  43.                 iargv=iargv+1;
  44.                 stpcpy(fname[ivar],argv[iargv]);
  45.                 iargv1=iargv+1;
  46.                 stpcpy(fun[ivar],argv[iargv1]);
  47.                 ifun=ifun+1;
  48.                 iargv = iargv1;
  49.  
  50.                 }
  51.         if(strcmp(argv[iargv],"fun")==0){
  52.  
  53.                 iargv++;
  54.                 while(strcmp(argv[iargv],fname[tfun])!=0){
  55.                                 tfun++;
  56.                 }
  57.                 //printf("%s", fun[tfun]);
  58.                 strcpy(elecom,"base");
  59.                 strcpy(elecom,fun[tfun]);
  60.                 iargv++;
  61.                 strcat(elecom, argv[iargv]);
  62.                 system(elecom);                
  63.                 }
  64.         if(strcmp(argv[iargv],"var")==0){
  65.                
  66.                 iargv=iargv+1;
  67.                 stpcpy(vname[ivar],argv[iargv]);
  68.                 iargv1=iargv+1;
  69.                 stpcpy(var[ivar],argv[iargv1]);
  70.                 ivar1=ivar+1;
  71.                 iargv = iargv1;
  72.                
  73.                 //printf("%s\n",vname[ivar]);
  74.                 //printf("%s\n",var[ivar]);
  75.                 }
  76.         if(strcmp(argv[iargv],"echo")==0){
  77.                
  78.                 //printf("in");
  79.                 iargv++;
  80.                 if (strcmp(argv[iargv],"%")==0){
  81.                
  82.                         iargv++;
  83.                         while(strcmp(argv[iargv],vname[tvar])!=0){
  84.                                 tvar++;
  85.                         }
  86.                 printf("%s\n",var[tvar]);
  87.  
  88.                 }
  89.                 else {
  90.                         printf("%s\n", argv[iargv]);
  91.                 }
  92.                 }
  93.         if(strcmp(argv[iargv],"kin")==0){
  94.                 printf("\n");
  95.                 tvar1 = 0;
  96.                 iargv++;
  97.                 while(strcmp(argv[iargv],vname[tvar])){
  98.  
  99.                                 tvar1++;
  100.                                
  101.                         }
  102.                
  103.                 scanf("%s",var[tvar1]);
  104.         }
  105.         if(strcmp(argv[iargv],"write")==0){
  106.                
  107.                 FILE *fp;
  108.                 iargv++;
  109.                 fp = fopen(argv[iargv],"w+");
  110.                 iargv++;
  111.                 if (strcmp(argv[iargv],"%")==0){
  112.                 iargv++;
  113.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  114.                                 tvar++;
  115.                         }
  116.                 fprintf(fp,"%s",var[tvar]);
  117.                 }
  118.                 else {
  119.                         fprintf(fp,"%s",argv[iargv]);
  120.                 }
  121.         }
  122.         if(strcmp(argv[iargv],"sys")==0){
  123.                 iargv++;
  124.                 if (strcmp(argv[iargv],"%")==0){
  125.                 iargv++;
  126.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  127.                                 tvar++;
  128.                         }
  129.                 system(var[tvar]);
  130.                 }
  131.                 else {
  132.                         system(argv[iargv]);
  133.                 }
  134.         }
  135.         if(strcmp(argv[iargv],"read")==0){
  136.                
  137.                 //printf("in");
  138.                 iargv++;
  139.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  140.                                 tvar++;
  141.                         }
  142.                 iargv++;
  143.                 point = atoi(argv[iargv]);
  144.                 iargv++;
  145.                 FILE *read = fopen(argv[iargv],"r");
  146.                 fgets(var[tvar],point,read);
  147.                 }
  148.         if(strcmp(argv[iargv],"cond")==0){
  149.                 printf("cond");
  150.                 iargv= iargv + 1;
  151.                 /* quando tento di eseguire
  152.                         Program received signal SIGSEGV, Segmentation fault.
  153.                         0x0024d01b in ?? () from /lib/i386-linux-gnu/libc.so.6
  154.                 */
  155.                 if(strcmp(argv[iargv],"%")==0){
  156.                         //printf("varone");
  157.                         iargv++;
  158.                         if(strcmp(argv[iargv],"==")==0){
  159.                                 iargv++;
  160.                                 for(tvar = 0;strcmp(argv[iargv],vname[tvar])!=0;tvar++){
  161.                                 }
  162.                                 iargv++;
  163.                                 for(fori = 0;strcmp(argv[iargv],vname[fori])!=0;fori++){
  164.                                 }
  165.                                 if(strcmp(var[tvar],var[fori])==0){
  166.                                                 goto ifgo;
  167.                                 }
  168.                                 else{
  169.                                         iargv++;
  170.                                         while(strcmp(argv[iargv],"done")!=0){
  171.                                                 iargv++;
  172.                                         }
  173.                                 }
  174.                         }
  175.  
  176.                 }
  177.                 //OK
  178.                 if(strcmp(argv[iargv],"$")==0){
  179.                         //printf("notvarone");
  180.                         iargv++;
  181.                         if(strcmp(argv[iargv],"==")==0){
  182.                                 iargv++;
  183.                                 //printf("in1");
  184.                                 while(strcmp(argv[iargv],vname[tvar])!=0){
  185.                                         tvar++;
  186.                                 }
  187.                                 iargv++;
  188.                                 if(strcmp(var[tvar],argv[iargv])==0){
  189.                                                 goto ifgo;
  190.                                 }
  191.                                 else{
  192.                                 iargv++;
  193.                                 while(strcmp(argv[iargv],"done")!=0){
  194.                                                 iargv++;
  195.                                                 }
  196.                                 }
  197.                         }
  198.                 }              
  199.  
  200.         }
  201. }
  202. ifgo:
  203. while (inf==0){
  204.         tvar = 0;
  205.         iargv=iargv+1;
  206.         /*if(strcmp(argv[iargv],"mate")==0){
  207.                 iargv = iargv + 1;
  208.                 if(strcmp(argv[iargv],"%")==0){
  209.                 }
  210.                 else {
  211.                 }
  212.         }*/
  213.         /*if(strcmp(argv[iargv],"div")==0){
  214.  
  215.                 iargv++;
  216.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  217.                                 tvar++;
  218.                 }
  219.                 iargv++;
  220.                 ptr = getevn(argv[iargv]);
  221.                 }
  222.         */
  223.         if(strcmp(argv[iargv],"dif")==0){
  224.  
  225.                 iargv=iargv+1;
  226.                 stpcpy(fname[ivar],argv[iargv]);
  227.                 iargv1=iargv+1;
  228.                 stpcpy(fun[ivar],argv[iargv1]);
  229.                 ifun=ifun+1;
  230.                 iargv = iargv1;
  231.  
  232.                 }
  233.         if(strcmp(argv[iargv],"fun")==0){
  234.  
  235.                 iargv++;
  236.                 while(strcmp(argv[iargv],fname[tfun])!=0){
  237.                                 tfun++;
  238.                 }
  239.                 //printf("%s", fun[tfun]);
  240.                 strcpy(elecom,"base");
  241.                 strcpy(elecom,fun[tfun]);
  242.                 iargv++;
  243.                 strcat(elecom, argv[iargv]);
  244.                 system(elecom);                
  245.                 }
  246.         if(strcmp(argv[iargv],"var")==0){
  247.                
  248.                 iargv=iargv+1;
  249.                 stpcpy(vname[ivar],argv[iargv]);
  250.                 iargv1=iargv+1;
  251.                 stpcpy(var[ivar],argv[iargv1]);
  252.                 ivar1=ivar+1;
  253.                 iargv = iargv1;
  254.                
  255.                 //printf("%s\n",vname[ivar]);
  256.                 //printf("%s\n",var[ivar]);
  257.                 }
  258.         if(strcmp(argv[iargv],"echo")==0){
  259.                
  260.                 //printf("in");
  261.                 iargv++;
  262.                 if (strcmp(argv[iargv],"%")==0){
  263.                
  264.                         iargv++;
  265.                         while(strcmp(argv[iargv],vname[tvar])!=0){
  266.                                 tvar++;
  267.                         }
  268.                 printf("%s\n",var[tvar]);
  269.  
  270.                 }
  271.                 else {
  272.                         printf("%s\n", argv[iargv]);
  273.                 }
  274.                 }
  275.         if(strcmp(argv[iargv],"kin")==0){
  276.                 printf("\n");
  277.                 tvar1 = 0;
  278.                 iargv++;
  279.                 while(strcmp(argv[iargv],vname[tvar])){
  280.  
  281.                                 tvar1++;
  282.                                
  283.                         }
  284.                
  285.                 scanf("%s",var[tvar1]);
  286.         }
  287.         if(strcmp(argv[iargv],"write")==0){
  288.                
  289.                 FILE *fp;
  290.                 iargv++;
  291.                 fp = fopen(argv[iargv],"w+");
  292.                 iargv++;
  293.                 if (strcmp(argv[iargv],"%")==0){
  294.                 iargv++;
  295.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  296.                                 tvar++;
  297.                         }
  298.                 fprintf(fp,"%s",var[tvar]);
  299.                 }
  300.                 else {
  301.                         fprintf(fp,"%s",argv[iargv]);
  302.                 }
  303.         }
  304.         if(strcmp(argv[iargv],"sys")==0){
  305.                 iargv++;
  306.                 if (strcmp(argv[iargv],"%")==0){
  307.                 iargv++;
  308.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  309.                                 tvar++;
  310.                         }
  311.                 system(var[tvar]);
  312.                 }
  313.                 else {
  314.                         system(argv[iargv]);
  315.                 }
  316.         }
  317.         if(strcmp(argv[iargv],"read")==0){
  318.                
  319.                 //printf("in");
  320.                 iargv++;
  321.                 while(strcmp(argv[iargv],vname[tvar])!=0){
  322.                                 tvar++;
  323.                         }
  324.                 iargv++;
  325.                 point = atoi(argv[iargv]);
  326.                 iargv++;
  327.                 FILE *read = fopen(argv[iargv],"r");
  328.                 fgets(var[tvar],point,read);
  329.                 }
  330.         if(strcmp(argv[iargv],"done")==0){
  331.                         goto normalgo;
  332.         }
  333.         if(strcmp(argv[iargv],"cond")==0){
  334.                 iargv++;
  335.                 if(strcmp(argv[iargv],"%")==0){
  336.  
  337.                 }
  338.                 if(strcmp(argv[iargv],"$")==0){
  339.                         iargv++;
  340.                         if(strcmp(argv[iargv],"==")==0){
  341.                                 iargv++;
  342.                                 //printf("in1");
  343.                                 while(strcmp(argv[iargv],vname[tvar])!=0){
  344.                                         tvar++;
  345.                                 }
  346.                                 iargv++;
  347.                                 if(strcmp(var[tvar],argv[iargv])==0){
  348.                                                 goto ifgo;
  349.                                 }
  350.                         }
  351.                 }              
  352.  
  353.         }
  354. }
  355. endgo:
  356. printf("%s\n",argv[1]);
  357. return 0;
  358. }


Ultima modifica effettuata da Umberto il 22/07/2012 alle 18:15
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:21
Domenica, 22/07/2012
Ma che vuoi dire?

Il ciclo

Codice sorgente - presumibilmente Plain Text

  1. while(strcmp(argv[iargv],vname[tvar])!=0){
  2.                                         tvar++;
  3.                                 }



è 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à.
PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 18:26
Domenica, 22/07/2012
lo ho sostituito con un ciclo for riga 160 e nella riga 184 il while funziona

Ultima modifica effettuata da Umberto il 22/07/2012 alle 18:27
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo