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