gcc 4.4.4 c89null che termina una stringa
Qual è il modo standard per terminare una stringa null? Quando utilizzo lo NULL
, ricevo un messaggio di avviso.
*dest++ = 0;
*dest++ = '\0';
*dest++ = NULL; /* Warning: Assignment takes integer from pointer without a cast */
Codice sorgente:
size_t s_strscpy(char *dest, const char *src, const size_t len)
{
/* Copy the contents from src to dest */
size_t i = 0;
for(i = 0; i < len; i++)
*dest++ = *src++;
/* Null terminate dest */
*dest++ = 0;
return i;
}
Un'altra domanda: ho deliberatamente commentata la linea che nulla termina. Tuttavia, ha ancora correttamente stampato il contenuto del dest. Il chiamante di questa funzione invierebbe la lunghezza della stringa includendo o il NULL
incluso. Ad esempio strlen(src) + 1
o stlen(src)
.
size_t s_strscpy(char *dest, const char *src, const size_t len)
{
/* Copy the contents from src to dest */
size_t i = 0;
/* Don't copy the null terminator */
for(i = 0; i < len - 1; i++)
*dest++ = *src++;
/* Don't add the Null terminator */
/* *dest++ = 0; */
return i;
}
Preferisco '* dest ++ = '\ 0'; dal momento che ''\ 0'' ha il tipo corretto in questo contesto. –
@Paul R: Perché non fai questa risposta? – Lucas
'* dest ++ = 0;' perché post-incrementare il puntatore dopo aver assegnato il valore deferenziato a 0? – Larry