Řetězec -> integer – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Řetězec -> integer – C / C++ – Fórum – Programujte.comŘetězec -> integer – C / C++ – Fórum – Programujte.com

 

Ondřej
~ Anonymní uživatel
156 příspěvků
27. 1. 2011   #1
-
0
-

Dobrý den,
chtěl bych se zeptat co se stane, když si nechám vypsat celočíselnou hodnotu argumentu typu řetězec.

Například mám printf("%d", "Ahoj");

Vůbec nemůžu nikde zjistit co se mi to vypisuje za číslo na obrazovku.

Díky za každý nápad...

Nahlásit jako SPAM
IP: 81.201.60.–
Wizard0
Stálý člen
27. 1. 2011   #2
-
0
-

V tomto pripade sa ti vypise pointer na retazec.

Nahlásit jako SPAM
IP: 85.216.193.–
nervak0
Věrný člen
27. 1. 2011   #3
-
0
-

To je jako

char *p = "Ahoj";

printf("%d", p);
Čili, vypíše to adresu toho řetězce (případně část té adresy).

Nahlásit jako SPAM
IP: 213.211.51.–
Ondřej
~ Anonymní uživatel
156 příspěvků
27. 1. 2011   #4
-
0
-

Wizard napsal:
V tomto pripade sa ti vypise pointer na retazec.



Aha.. já jsem si myslel něco podobného, něco s adresou, ale pak mi bylo divné, že když tam dám printf("%s", "Ahoj"); tak že by to poznalo že to nemá vypsat adresu, ale samotný řetězec. Protože s tím %s mi to vypíše Ahoj...

Nahlásit jako SPAM
IP: 81.201.60.–
Ondřej
~ Anonymní uživatel
156 příspěvků
27. 1. 2011   #5
-
0
-

Nebo ještě jinak
pokud napíšu toto:

printf("%d %s", "Ahoj", "A");

char *p = "Ahoj";
printf("\n\n%s", p);

tak mi to vytiskne dve stejna cisla...

To je tím že to je jenom cast toho ukazatele? nebo proc jsou stejny?

Nahlásit jako SPAM
IP: 81.201.60.–
nervak0
Věrný člen
28. 1. 2011   #6
-
0
-

Ondřej napsal: by to poznalo že to nemá vypsat adresu, ale samotný řetězec


Nepoznalo, je to funkce jako každá jiná a chová se podle zadaných parametrů. A ty jsi tím %s řekl, že další parametr bude ukazatel na řetězec a má se vypsat jeho obsah.

Nahlásit jako SPAM
IP: 213.211.51.–
nervak0
Věrný člen
28. 1. 2011   #7
-
0
-

Ondřej napsal: tak mi to vytiskne dve stejna cisla...


Vytiskne se jen jedno číslo. Předpokládám, že jsi to jen špatně napsal a v tom druhém printf mělo být %d.

To je tím že to je jenom cast toho ukazatele?


Tou částí ukazatele jsem myslel to, že printf neví, jaké parametry jsi mu nasázel za formátovacím řetezcem a řídí se jen jeho obsahem. A int (%d) může být menší než ukazatel. Jako když tady ve formátu řeknu ať vypíše dvě 32-bitové hodnoty a bude tam jedna 64-bitová, tak každé %x z ní vezme jen část (na 32bit procesoru).
printf("%x .. %x\n", 0x1122334455667788LL);
Vypíše 55667788 .. 11223344.

nebo proc jsou stejny?


Protože překladač není úplně hloupý a dva stejné konstantní řetězce bere jako jeden.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 138 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý