Dotaz C

Jindroush jindroush na seznam.cz
Neděle Leden 7 13:48:06 CET 2018


char str[80] vyrobi pole charu o delce 80, tj. 80 bajtu
char* str[80] vyrobi pole pointeru na char o delce 80, takze 80*4 nebo 
80*8 bajtu.
Fungovat to bude, jecet to bude. Cekal bych, ze jediny rozdil v 
disassembly by mela byt alokace na stacku.

V kazdem pripade char[80] je misto na retezec.
char*[80] je misto na 80 pointeru na retezce.
Splest se to neda, takze predstava, ze nekdo distribuuje kod s takovym 
warningem, me trochu desi ;)

J.

On 7.1.2018 13:39, Pavel Troller wrote:
> Zdravím,
>    při neděli malý blbý dotaz... Zase jednou typická C vlastnost typu
> "ať je tam hvězdička nebo není, dělá to totéž :-)".
> 
> Mějme tento example:
> 
> #include <stdio.h>
> #include <string.h>
> 
> int main(void) {
>          char str[80];
>          snprintf(str,80,"%s","Nazdar ahoj\n");
>          printf("%s",str);
>          return 0;
> }
> 
> Vše jasné, funguje jak má.
> 
> A nyní změníme řádek s deklarací str na:
> 	char *str[80];
> 
> Kompilátor sice warninguje o nesprávném typu 1. parametru pro snprintf,
> že to má být char * a je to char **, ale zkompiluje to, binár je stejně
> velký a stejně funkční :-). Nicméně disassembly kódu ukazuje, že je to
> zkompilované mírně odlišně.
>    Ptám se proto, že tu cosi kompiluji (není to můj produkt), hlásí mi
> to ten warning, tak jsem to začal zkoumat, mají tam tu druhou možnost
> s hvězdičkou, tak uvažuji, proč ji tam mají a zda to mám přepsat na tu
> první, jak bych to udělal já :-).
> 
> Zdraví Pavel
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list at list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 


-- 
Jindroush <jindroush at seznam.cz>


Další informace o konferenci Hw-list