Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56

    [c] inizializzare stringhe

    mi potete dare una mano?
    leggevo che era possobile inizializzare le stringhe anche in questo modo
    char *string="ciao"!
    usare un puntatore, ma se non conosco la lughezza della stringa che va letta?
    pensavo così e funziona ma credo di aver commesso un errore o quale cosa che in futuro potrà dare luogo agli errori
    #include <stdio.h>
    int main()
    {
    char*punts[0];
    printf("scrivere la stringa ");
    scanf("%s",punts);
    fflush(stdin);
    printf("%s",punts);
    getchar();
    return 0;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    provo a spiegarmi,
    -se dichiaro un array di puntatori char es array da 21 elementi l'ultimo è un terminatore /0 ????
    credo di no perchè è un array di puntatori anche se "guardano char"
    -in array di puntatori char(5 elementi) inserisco 5 stringhe noto che vengono memorizzate una di seguto all'altra
    codice:
    #include <stdio.h>
    int main()
    {
        int a=0;
     char*array_punts[5];
     for(a=0;a<=4;a++)
     {
       printf("inserisci il nome   ");
       scanf("%s",&array_punts[a]);
       fflush(stdin);
     }
     
       printf("%s",array_punts);
    
     getchar();
     return 0;
    }
    come posso stampare solo es il terzo nome, in sostanza non funziona
    codice:
    #include <stdio.h>
    int main()
    {
        int a=0;
     char*array_punts[5];
     for(a=0;a<=4;a++)
     {
       printf("inserisci il nome   ");
       scanf("%s",&array_punts[a]);
       fflush(stdin);
     }
     printf("%s",array_punts[2]);
     getchar();
     return 0;
    }

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Attenzione ... non puoi usare puntatori a stringhe senza allocare prima la memoria a cui essi puntano.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    Prova a dichiarare l'array in modo statico

    codice:
    char array_punts[5][5];
    e ti funziona.

    Nel tuo codice non stai inizializzando il numero di stringhe, e quindi fai un paciocco con la gestione di esse in memoria


    Consiglio: inizia ad istanziare la memoria per gestire queste stringhe in modo dinamico, per esempio, se nel tuo codice avessi fatto un lavoro del genere

    codice:
    char *array_punts[5];
    array_punts = (char **)malloc(sizeof(char) * 5);
    avresti risolto perchè ora il numero di stringhe è inizializzato.
    Molto meglio invece se fai così

    codice:
    char **array_punts;
    int i;
    
    array_punts = (char **)malloc(sizeof(char) * 5); // Organizzi l'array per contenere 5 stringhe
    
    for (i = 0; i < 5; i++) 
       array_punts[i] = (char *)malloc(sizeof(char) * 5); // Istanzi la lunghezza di ognuna delle 5 stringhe
    Cosi ottieni un array che può contenere 5 stringhe, ognuna di lunghezza 4 (5 - carattere terminatore '\0')

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    Grazie davvero di cuore kej. (credo il tuo code oltre che per esrc mi servirà molto i prossimi giorni spero nel tuo aiuto!!!)
    devo ancora arrivare a guardare l'allocazione!!!
    ma non ho proprio modo di impedire una predeterminazione delle dimensioni array,(nella fase in cui sono) lasciando a chi esegue il compito???
    stasera posterò un code per spiegarmi meglio

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da jc74
    ma non ho proprio modo di impedire una predeterminazione delle dimensioni array,(nella fase in cui sono) lasciando a chi esegue il compito???
    Con l'allocazione dinamica ... ma tu stesso hai detto

    devo ancora arrivare a guardare l'allocazione!!!
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    in realtà volevo farla determinare da chi mandava in esecuzione, mi spiego meglio
    codice:
    int a=0;
    printf("inserire il numero dei valori da valutare     ");
    scanf("%d",&a);
    fflush(stdin);
    int array[a];
    int b=0;
    for(b=0;b<=b-1;b++)
    {
    printf("inserire il valore    ");
    scanf("%d",&array[b]);
    fflush(stdin);
    }
    (spero di non aver commesso errori)
    non so se mi sono spiegato, anche se credo che a molti una cosa del genere non piace, peraltro a tal proposito mi piacerebbe chiedere su alcuni aspetti dell'allocazione in generale come "teoria",ma do un okkio al regolamento prima di postare

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    Si, puoi fare una cosa del genere (se ho capito bene vuoi applicarlo ad un array di stringhe):

    codice:
    #define MAXLENS 50
    
    int main() {
    
       int nstrings;
    
       printf("Numero di stringhe: ");
       scanf("%d", &nstrings);
    
       char array[nstrings][MAXLENS];
    
       ...
    }
    E' brutto da vedere, ma finchè non arrivi a studiarti l'allocazione dinamica della memoria (che è sempre la soluzione migliore, sopratutto quando tratti le stringhe) allora può andarti più che bene.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Kej
    Si, puoi fare una cosa del genere ...
    Questo solo con un compilatore C99 ... e non tutti sono compatibili (oltre al fatto che non sopporto proprio questo tipo di codice ... )
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da jc74
    non so se mi sono spiegato, anche se credo che a molti una cosa del genere non piace
    No che non piace ... molti compilatori protesteranno ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.