Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    3

    [C] caratteri indesiderati

    Salve a tutti, è da poco che studio C e avrei una domanda da porvi, prendiamo questo semplice codice:

    codice:
    #include <stdio.h>
    
    main()
    {      
           
           char str[1024], keys[1024];
           int i, c, j;
           for(i = j = 0; (c = getchar()) != '\n' && i < 1024; i++ )
           {
                   if( c == '!' )
                   { keys[j] = c; j++; }
           }
           
    
           printf("%s\n", keys);
           system("PAUSE");
           return 0;
    }
    Qualcuno sa dirmi perchè nell'array keys, invece di starci solo i punti interrogativi, compaiono anche altri caratteri strani che non ho battuto a tastiera?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Perché non hai messo il terminatore NULL alla fine del ciclo.

  3. #3

    Re: [C] caratteri indesiderati

    Originariamente inviato da C0d3
    ...
    Qualcuno sa dirmi perchè nell'array keys, invece di starci solo i punti interrogativi, compaiono anche altri caratteri strani che non ho battuto a tastiera?
    Hem ... Quali punti interrogativi ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    46
    infatti...

    Ogni stringa in c termina col carattere '\0'

    Quando printf stampa la tua stringa stampa tutti gli elementi dell'array finché non raggiunge il carattere '\0' che nella tua stringa non c'è.

    Quando inizializzi una stringa facendo per esempio:

    char stringa[]="ciao";

    crei un vettore di QUATTRO caratteri dei quali l'ultimo è '\0'. In pratica equivale a scrivere:


    char stringa[]={ 'c' , 'i' , 'a' , 'o' , '\0' };

    Nella tua stringa manca appunto il carattere '\0' finale che permette a printf di riconoscere la fine della stringa all'interno dell'array. Spero di essere stato chiaro

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    3
    Vi ringrazio per le risposte(si gianpa, sei stato chiaro ), erroneamente pensavo che il null venisse aggiunto automaticamente nella stringa, come avviene nel caso di un' inizializzazione.

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