Portál AbcLinuxu, 12. května 2025 07:54

Dotaz: jazyc c strcmp a argv[][]

23.4.2011 12:17 Tomasko | skóre: 4
jazyc c strcmp a argv[][]
Přečteno: 317×
Odpovědět | Admin
Zdravím v krásný slunečný den.
int main(int argc, char *argv[])
{
.
.
if ( strcmp("-", &argv[1][0]) == 0 )
	{
 		printf("CHYBAAA!\n");
	}
.
.
.
return 0;
}
kdyz zadam prvni parametr -1, tak mi to chybu nevypise, ale kdyz prehodim v kodu &argv[1][0] za &argv[1][1] a napisu 1-, tak mi to chybu vypise. Nevíte jak to udělat aby mi to bralo "-" pred parametrem? Děkuji

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.4.2011 12:37 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: jazyc c strcmp a argv[][]
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pretože &argv[1][0] je adresa prvého znaku parametra číslo jeden. To je pri parametri "-1" znak "-". Ale strcmp porovnáva nie znaky ale reťazce. To znamená, že v tomto prípade sa porovnáva "-" v prvom parametri funkcie strcmp s reťazcom "-1" (teda reťazcom, ktorý začína znakom "-" a pokračuje znakom "1") a porovnanie vráti "nezhodujú sa".

Naopak &argv[1][1] je adresa druhého znaku z reťazca "1-" a teda adresa znaku "-". Inými slovami teda &argv[1][1] ukazuje na reťazec "-". V tomto prípade sa teda "-" porovnáva s "-" a porovnanie vráti "zhoduje sa".

Odporúčam rozdeliť výraz a postupne dosadzovať do rôznych premenných,
char *a=argv[1];
char b=a[0];
char c=a[1];
char *d=&c;
prípadne si nechať vypísať kus pamäte kam pointre ukazujú. Vrátane kusa pamäte pred.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.