Ho molte funzioni che prevedono una stringa come argomento, per cui utilizzo char*
, ma tutte le mie funzioni che prevedono un array di byte, utilizzano anche char*
.Distingue tra stringhe e array di byte?
Il problema è che posso facilmente commettere l'errore di passare un array di byte in una funzione stringa, causando tutti i tipi di overflow, perché non è possibile trovare il terminatore null.
In che cosa si verifica di solito questo? Posso immaginare di cambiare tutte le mie funzioni di array di byte per prendere uno uint8_t
, e quindi il compilatore avviserà della firma quando passo una stringa. O qual è il giusto approccio qui?
Creare un wrapper per un array di byte ?? –
@VaughanHilts Non vedo come questo risolva il mio problema? – Muis
Una stringa * è * una matrice di byte. Poiché non è possibile passare effettivamente gli array in C, ma solo un puntatore al primo elemento, in genere è necessario anche passare una dimensione. Basta controllare se la matrice contiene un valore zero. Se lo fa, allora è una "stringa". Altrimenti, non lo è. –