ho incontrato un pezzo di codice esegue la seguente inizializzazione:String inizializzatore con graffe
static const uint8_t s[] = {"Some string"};
mi si aspetterebbe che sia interpretato come segue: Il lato destro sta abbinando un array di puntatori char con singolo elemento che punta a una stringa letterale "Some string". Mentre la parte sinistra è un array di uint8_t
. Quindi il comportamento che mi aspetto è che il primo elemento di s
riceva qualche valore troncato del puntatore al letterale stringa, causando in tal modo un comportamento imprevisto nel seguente codice, supponendo che s
sia una stringa.
Ho fatto il seguente codice di prova:
#include <stdint.h>
#include <stdio.h>
static const uint8_t s1[] = "String1";
static const uint8_t s2[] = { "String2" };
int main(void){
printf("%p, %p\n", s1, s2);
printf("%s, %s\n", s1, s2);
return 0;
}
Per la mia sorpresa sembra che non sta accadendo. Non solo il codice funzionerà correttamente, ma anche lo smontaggio mostra che sia s1
sia s2
vengono inizializzati come stringhe corrispondenti in modo identico.
È qualcosa di specifico gcc
? La sintassi C consente di prendere letteralmente la stringa singola in {}
e interpretarla ancora come stringa letterale?
Aggiungere una seconda stringa e vedere cosa succede: 'static const uint8_t s2 [] = {" String2 "," String3 "};' – LPs
@LPs Sì, l'ho provato. –
Ok, DevSolar ti ha dato quello che ti serve. – LPs