Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] strutture, C e puntatori

    ciao,

    ho fatto una struttura del genere:

    typedef struct{
    char voce1[MAX];
    char voce2[MAX];
    char voce3[MAX];
    int voce4;
    char *stringa;
    } Struttura;

    poi ho fatto una funzione che con una malloc dovrebbe prendere in input una stringa qualunque ed immagazzinarla nel puntatore *s;
    dopo vorrei che tutta la stringa contenuta dal puntatore *s venisse immagazzinata nelal variabile della struttura " char *stringa " in modo da ritornarla con la funzione...

    io ho fatto così:

    Struttura inserisci_testo(){ /* FUNZIONE INSERISCI TESTO */
    Struttura testo;

    unsigned long i = 0;

    printf("inserisci una stringa:\n");

    if( ! (testo.stringa = (char*) malloc(sizeof(char))) )
    {
    printf("\aimpossibile allocare la memoria\n");

    }
    else {

    while( getchar != '\0' )
    {
    testo.stringa[i]=getchar();
    if(testo.stringa[i]=='\n') break;

    i++;
    if( ! (testo.stringa = (char*) realloc(testo.stringa, i+1)) )
    {
    printf("\aimpossibile allocare altra memoria\n");

    }
    }



    testo.stringa[i]='\0';

    }

    printf("la stringa inserita e':\n%s\nsono stati allocati %d byte\n", testo.stringa, ++i);

    return testo;

    }

    il problema è che anke se viene compilato bene, quando lo faccio girare non va bene nel senso che non mi chiede di inserire il testo e mi visualizza solo il contenuto delle printf... qual è il problema secondo voi ?
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  2. #2
    codice:
    ...while( getchar != '\0' )...
    non ho capito perché metti "getchar != '\0'" dentro al while??
    se non lo sapessi il nome di una funzione è il puntatore al primo byte del suo codice.

    non serve a niente se poi interrompi il ciclo con
    codice:
    if(testo.stringa[i]=='\n') break;

  3. #3
    si lo so che il nome di una funzione è un puntatore alla sua prima locazione di memoria, come i vettori...

    avevo messo:

    while( getchar != '\0' )

    perchè mi serviva una condizione da mettere nel while per renderlo vero sino ad un certo punto... ma evidentemente ho sbagliato... come devo fare a correggere l'errore ?
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  4. #4
    se quello che vuoi fare è un ciclo infinito da interrompere opportunamente con il brak... ti basta fare

    while(1)


    cmq penso che questo sia migliore:
    codice:
    char c;
    while((c = getchar()) != EOF)
    {
     testo.stringa[i]=c; 
     i++;
     if( ! (testo.stringa = (char*) realloc(testo.stringa, i+1)) )
      {
      printf("\aimpossibile allocare altra memoria\n");
     } 
    }

  5. #5
    la cosa è strana, sia la tua funziona , che la mia compilata in un altro progetto con il dev-c++ vanno bene, ma quando copio il codice all'interno della funzione che sta nel mio programma non mi funziona mai... mi da sempre errori vari...

    ho provato a fare così:

    Struttura inserisci_testo(){ /* FUNZIONE INSERISCI TESTO */
    Editor testo;

    unsigned long i=0;

    printf("inserisci una stringa:\n");

    if( ! (testo.stringa = (char*) malloc(sizeof(char))) )
    {
    printf("\aimpossibile allocare la memoria\n");

    }
    else {

    char c;
    while((c = getchar()) != EOF)

    {
    testo.stringa[i]=getchar();
    if(testo.stringa[i]=='\n') break;

    i++;
    if( ! (testo.stringa = (char*) realloc(testo.stringa, i+1)) )
    {
    printf("\aimpossibile allocare altra memoria\n");

    }
    }}
    testo.stringa[i]='\0';

    printf("la stringa inserita e':\n%s\nsono stati allocati %d byte\n", testo.stringa, ++i);

    return testo;

    ma non mi funziona... mi da strani errori quando vado a salvare la stringa... a volte nemmeno me lo chiede di inserirla...

    la cosa è bizarra perchè se provo a compilarla in un altro progetto funziona...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  6. #6
    se non riporti gli errori è un po' difficili beccarli visto che probabilmente non dipendono da wuesto codice in se stesso visto che a se stante compila...

  7. #7
    il codice quando lo compilo non ha errori...
    questi escono quando faccio girare il programma, a volte mi prende la stringa, ma poi dando invio non si riesce ad uscire dal programma e si continua ad inserire nuovi caratteri senza poter chiudere la stringa a volte non mi permette di inserire nessun carattere...

    però durante la compilazione va bene...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  8. #8
    eh.. errori logici..

    vai di debugger

  9. #9
    mm eh si mi sa che finisce così... anke se c metterò un bel pò a fare il debbuger...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  10. #10
    Originariamente inviato da rocco.g
    mm eh si mi sa che finisce così... anke se c metterò un bel pò a fare il debbuger...
    usa il debugger di devc++.. è ottimo.. ti permette di eseguire una riga alla volta e monitorare le variabili...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.