Jen možná doplním, že v céčku se ten řádek:
char *str="Hello";
může chovat rozdílně ve chvíli, kdy se pokusíme zapsat:
str[4]='*';
V Unixech na procesorech s ochranou paměti (=všechny moderní) to segfaultne, ale třeba v DOSu normálně půjde ten konstantní řetězec přepsat, na MCU se nemusí stát nic (do FLASH nezapíšeš, ale ochrana se taky nekoná), mnohdy to ani nepůjde přeložit, protože na opravdu malých MCU ani nejsou instrukce pro zápis do code segmentu.
Ono také správnější je c++kové
const char *str = "Hello world!";
Ostatně, ani ten první příklad v článku neměl 'mut', takže se opravdu jednalo o konstantu.
P.S.: Proto raději užívám c++ i v případě, že by mi mohlo stačit jen 'c' prakticky bez úprav. Dá se tam prostě psát bezpečněji, když člověk ví jak.
Myslel jsem to obecně, ale platí i pro const. Protože klasické C s const moc nepočítá. Pokud už ho 'C' překladač vezme, knihovny s ním nepočítají. Když už jsme u stringů stringů, strstr výsledek je bez const, vstupem přitom mohou být const. Platí obecně, protože C přetypování const poinetrů na non-const někdy dovolí /max. varuje, někdy ani to ne/, C++ zakáže.