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++ - Blocco programma dopo esecuzione
Forum - C/C++ - Blocco programma dopo esecuzione

Avatar
djleo (Member)
Pro


Messaggi: 72
Iscritto: 07/03/2010

Segnala al moderatore
Postato alle 13:01
Venerdì, 23/03/2012
Ciao a tutti ho un problema con un programma :
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. char data[7];
  6. int IsPali(char data[7]);
  7. void StampaDatePali();
  8.                                        
  9. int main(){
  10.   StampaDatePali();  
  11.   system("pause");
  12. }
  13. int IsPali(char data[7]){
  14.     int i=0;
  15.     int l=strlen(data)-1;
  16.     while (i<=l/2&&data[i]==data[l-i]){
  17.           i++;
  18.           };
  19.     if (i<=l/2) {return 1;}
  20.  
  21. }    
  22.  void StampaDatePali(){
  23.       int g,m,a;
  24.       char G[1],M[1],A[3];      
  25.       for (g=01;g<=31;g++){
  26.           for (m=01;m<=12;m++){
  27.               for (a=1900;a<=2012;a++){
  28.                   sprintf(G,"%d%d",0,g);
  29.                   sprintf(M,"%d%d",0,m);
  30.                   sprintf(A,"%d%d%d%d",000,a);
  31.                   strcat(data,G);
  32.                   strcat(data,M);
  33.                   strcat(data,A);
  34.                   if (IsPali(data)==1) printf("%c\n",data);  
  35.               }
  36.           }
  37.       };
  38.                
  39. }



una volta lanciata l'esecuzione mi esce un messaggio di windows che dice che il programma ha smesso di funzionare.
Per quale motivo?

Ultima modifica effettuata da djleo il 23/03/2012 alle 14:23
PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Up
3
Down
V
Segnala al moderatore
Postato alle 15:21
Venerdì, 23/03/2012
Mi sembra normale che questo programma abbia problemi.

Hai allocato un solo carattere per la stringa G con

G[1];

e pretendi di inserire al suo interno due caratteri più il terminatore?

E lo stesso per M[1] e A[3] ...

Poi esegui la strcat su data senza averla inizializzata.

Ovviamente avrai problemi in memoria.

(A parte il fatto che dovresti sostituire le tre sprintf e le tre strcat con una sola sprintf che faccia tutto).


Ho modificato cio ke si doveva modificare. nn so come usare la sprintf - djleo - 23/03/12 16:47
E cioè? Cosa hai modificato? Qual è il codice adesso? Per la sprintf studia la documentazione in http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/ - nessuno - 23/03/12 19:18


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