Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 36

Discussione: [c] : Stringhe

  1. #11
    Utente di HTML.it L'avatar di wolf64
    Registrato dal
    Jul 2001
    Messaggi
    521
    Originariamente inviato da Gmalex
    forse è meglio che non corro troppo...:master:
    Non preoccuparti, se ho imparato io... :gren: ...scherzi a parte, pian piano si impara tutto.
    Ciao
    Powered by Slack Current - Kernel 2.6.22
    Slackware Evangelist
    My LUG (Linux User Group): LinuxVar (LUG di Varese)

  2. #12

    Son meno stanco ..

    Mi son ripreso 80 righe di C:
    /************************************************** ***************************
    Mi avete convinto a dare un'idea di che cosa significa "programmare in C"
    spero questo programma sia utile per capire come vanno usati
    certi argomenti in C,in particolare l'allocazione dinamica
    Consigli:1)Evitare lunghi testi senno si fa uso pesante della memoria "heap"
    2)Nn è la stessa cosa di usare getchar(),putchar() in coppia
    qui il testo viene allocato in memoria, e si puo'
    recuperare bit per bit alla fine
    HMESFET*/
    #include <stdio.h> /*la solita robaccia per input/output*/
    #include <stdlib.h> /*malloc(),realloc()*/
    #define UNIX /*se WINDOWS-->eliminare questa riga #define UNIX*/
    #ifdef UNIX
    #include <unistd.h>
    #define PULISCI "clear"
    #define ATTENDI sleep
    #define TIME 10
    #define EOF1 "ctrl+d"
    #else
    #define PULISCI "cls"
    #define ATTENDI system
    #define TIME "pause"
    #define EOF1 "ctrl+z"
    #endif
    int main(void)
    {
    char *string,*bkup;
    char car;
    int flag=1;
    int flag1,i;
    printf("Scrivere del testo(%s per terminare): ",EOF1);
    i=1;
    if((string=(char*)malloc(sizeof(char)))==NULL)
    {
    perror("malloc()");
    flag=2;
    }
    else
    {
    bkup=string;
    while(((flag1=scanf("%c",&car))!=EOF)&&(flag))
    {
    if(!flag1)
    {
    perror("scanf()");
    flag=0;
    }
    else
    {
    *string=car;
    i++;
    if((bkup=(char*)realloc(bkup,sizeof(char)*i))==NUL L)/*alloco lo spazio per i char*/
    {
    perror("realloc()");
    flag=0;
    }
    else
    {
    string++;
    }
    }
    }
    *string='\0';
    }
    /* stampa di controllo*/
    if((flag!=0)&&(flag1!=0)&&(flag!=2))/*se nn ci sono stati errori*/
    {
    system(PULISCI);
    printf("Hai scritto:\n");
    while(*bkup!='\0')
    {
    printf("%c",*bkup);
    bkup++;
    }
    ATTENDI(TIME);
    return 0;
    }
    else
    {
    ATTENDI(TIME);
    return 2;
    }
    }

  3. #13

    Ulitma cosa per Degno

    #include <stdio.h>
    #include <string.h>
    int main() {
    char *string;
    scanf ("%c",string);
    }
    1)int *string;
    Dichiara 1 puntatore,che nn essendo
    inizializzato punta a 1 locazione
    casuale della memoria "heap"

    string.............indirizzi
    [eeff]---->[dati1]..eeff......R
    ...............[dati2]..eecc......A
    ...............[dati3]..eedd......M
    quindi all'indirizzo(casuale) eeff
    potrebbero esserci dati importanti
    caricati dal Sistema Operativo
    2)scanf("%c",string);
    scrivo a come input

    string.............indirizzi
    [eeff]---->[a].....eeff.........R
    ..............[dati2]..eecc.......A
    ..............[dati3]..eedd.......M

    Et voila' la frittata è fatta:
    dati1 è stato sovrascritto
    il programma che aveva allocato
    dati1 lo cerca ma trova a
    che nn è quello che si aspettava
    e si blocca!!
    Se dati1 serviva al Sistema
    Operativo si blocca il
    Sistema Operativo
    3)confucio says:Capire prima di
    insegnare e non
    dare consigli
    potenzialmente
    distruttivi agli
    altri.
    Se nn si conosce
    il funzionamento
    del PC a livello
    Hardware,evitare
    l'uso dei puntatori
    che se usati
    a caso fanno
    i guai piu'
    grossi
    Sempre piu' stanco...

  4. #14
    'zzo...grazie ragazzi...non sapevo potessi ottenere cosi' tanto...

  5. #15
    Ok, può capitare a tutti di dire ( o scrivere ) qualche caxxxta! Non c' era bisogno però di scrivere tutto quello che ha fatto hmesfet.
    Adesso funziona...


    #include <stdio.h>
    #include <string.h>

    int main() {
    char *string;
    string=(char *)malloc (sizeof(char);
    scanf ("%s", string);
    printf ("\n\n%s", string);
    }

  6. #16
    Come vedi il C non è così difficile.......

  7. #17
    Utente di HTML.it L'avatar di D4MI4NO
    Registrato dal
    Sep 2001
    Messaggi
    275
    ... fa solo uscire pazzi
    ...anche se la strada è dura...se stiamo assieme...arriveremo su quella cosa chiamata luna...

  8. #18
    Effettivamente devo ammettere che la soluzione più sicura rimane comunque quella proposta da hmesfet (ti chiami proprio così o è solo un nick? ). Infatti provate ad eseguire questo programma ed otterete risultati ancora più disastrosi di quelli prevedibili:

    #include <stdio.h>
    #include <string.h>


    void main() {
    char *str, *str2, C='a';
    str = &C-2;
    str2 = str+1;

    scanf ("%s", str);
    printf("\n\nstr = %s", str);
    printf("\n\nstr2 = %s", str2);
    printf("\n\nC = %c", C);
    return;
    }
    Supponiamo di voler stampare su schermo solo un char C ed una stringa "str" senza che questi elementi si influenzino a vicenda.
    Se l' allocazione di memoria del pun "str" alla cella che precede di due posti quella di "C" fosse casuale e non forzata (cioè avvenisse con una semplice chiamata a malloc), il programma genererebbe risultati imprevedibili.
    Come se questo non bastasse questo programma genera strani output a seconda che la stringa in input sia di lunghezza di 1, 2 o almeno 3 caratteri.
    Hmesfet, che ne dici?

  9. #19

  10. #20

    Re degno

    Degno ma il C te lo ha insegnato
    Teo Teocoli?
    Mi sa che hai dei gravi
    problemi sui puntatori

    str = &C-2;

    &C=è l'indirizzo fisico di 'C'

    .......var.....indirizzo
    .......[C].....ffee

    Ora chi è bravo mi dica quanto fa

    ffee-2?
    e se ha senso fare quest'operazione.
    Soluzione fffe è una costante
    quindi &C è 1 costante
    e &C-2 significherebbe modificare 1 costante che in quanto costante nn puo'
    essere modificata(eh eh)
    Risultato nn fate mai queste vaccate,
    nn a caso esiste l'"aritmetica dei puntatori"
    Mentre le operazioni sui puntatori sono
    lecite(sono varaibili),nn lo sono
    sugli indirizzi fisici(sono costanti)

    Degno ricomincia lo studio dei puntatori,1 errore simile all'universita' significherrebbe
    ridare l'esame di programmmazione
    Basta che mi sembro un vecchio
    bacchettone..

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 © 2026 vBulletin Solutions, Inc. All rights reserved.