Sto scrivendo un driver per un sistema incorporato che esegue una versione personalizzata di linux modificato (è un handscanner). Il produttore fornisce una distribuzione Eclipse Juno personalizzata con alcune librerie ed esempi in ingresso.Sicurezza dell'uso di 0 prima della fine degli array di caratteri
L'output che ricevo dal comportamento si presenta sotto forma di un array di caratteri standard. Sto usando i singoli caratteri nella matrice per trasmettere informazioni (ids di errore e codici di errore) come questo:
if (tmp[i] == 250])
Dove tmp
è un array di caratteri in forma di char tmp[500];
che viene prima inizializzato a 0
e poi riempito con input dal comport.
La mia domanda è:
supponendo che scorrere ogni pezzo della matrice, è sicuro da usare 0
(come in \0
) in qualsiasi momento prima della fine del Array? Assumendo Io sono:
- Non trattarlo come una stringa (scorrendo e di utilizzarlo come un array
int
) - In conoscenza di ciò che sta per essere lì e che cosa esattamente questo caso \ 0 in mezzo di ciò dovrebbe significare.
La ragione im chiedendo è perché ho avuto molti colleghi mi dicono che non avrei mai mai mai usare un array di caratteri che contiene \0
prima della fine, non importa le circostanze.
Il mio codice esegue attualmente come previsto, ma non so se potrebbe causare problemi in seguito.
Riscrivendolo per evitare questo comportamento sarebbe una parte non banale di lavoro.
Penso che se non usi mai le funzioni di stringa ('strcpy',' strcat', ecc.) Non dovrebbe esserci nessun problema –
penso che il tuo problema principale sarà fare con cose come 'tmp [i] == 250'. se tmp è un carattere, non è definito se è o meno firmato o non firmato. se è firmato, allora tale affermazione non può mai essere vera in quanto deve essere compresa tra -128 e 127 –
@TomTanner È dato che il carattere è sempre senza segno. – Magisch