Práce s parametry – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Práce s parametry – C / C++ – Fórum – Programujte.comPráce s parametry – C / C++ – Fórum – Programujte.com

 

Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #1
-
0
-

Zdravím, potřeboval bych pomoct..
mám v Cčku int main(int argc, char *argv[]), pomocí kterého načítám parametry, s kterými potřebuju dál pracovat.
Ale když se je pokusím přiřadit jako parametr další funkce a zavolat ji, např. encode(argv[2]); /nebo i jiné obměny/, tak mi to háže chybu :/ ..
Je nějakej způsob, jak bych je mohl přiřadit a dál s tím pracovat v jiné funkci? :/

Nahlásit jako SPAM
IP: 212.96.172.–
Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #2
-
0
-

Dobry, tak tohle sem vyřešil .. ted bych potřeboval nějak ověřit, jestli ten parametr argv[2] obsahuje jenom znaky A-Z a číslice 0-9 a asi ho budu potřebovat rozsekat na jednotlivý písmenka, abych s nimi mohl pracovat.. takže abych třeba ze slova AHOJ měl A, H, O,J .. nevíte někdo, jak na to? :/

Nahlásit jako SPAM
IP: 212.96.172.–
Earl Cash0
Věrný člen
4. 10. 2008   #3
-
0
-

To Koja : pokud si uvedomis, ze retezec je pole znaku (char), tak pak neni nic jednodussiho, nez cele pole projit v cyklu a jednotlive znaky otestovat...

char my_string[] = "AHOJ";

printf("%c\n", my_string[1]); //vypise pismeno H

EDIT: pro overeni, zda je znak velke pismeno, muzes pouzit fci isupper() viz http://www.cplusplus.com/reference/clibrary/cctype/isupper.html

Nahlásit jako SPAM
IP: 193.85.184.–
Oh my goodness, shut me down! Machines making machines. How perverse. (C-3PO)
KIIV
~ Moderátor
+43
God of flame
4. 10. 2008   #4
-
0
-

nezapomen si taky otestovat zda tam vubec argv[2] je :)

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #5
-
0
-

To Earl Cash: Jenže ten řetezec je v argv[2] a to asi nemůžu rozložit na znaky, nebo jo?
To KIIV: Neboj, testuju :)

Nahlásit jako SPAM
IP: 212.96.172.–
PaLaDiN
~ Anonymní uživatel
30 příspěvků
4. 10. 2008   #6
-
0
-

To Koja : Jasné, že môžeš :) .. argv je len pole reťazcov (pole polí) takže argv[2][1] ak by bolo v argv[2] "AHOJ" bude H

Nahlásit jako SPAM
IP: 88.212.21.–
Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #7
-
0
-

To PaLaDiN : Super super super, díky :)

Nahlásit jako SPAM
IP: 212.96.172.–
Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #8
-
0
-

Když už se teda ptám, tak když mám

int main (void) {

char a[] = "dum", b[] = "domecek";
int x = 4;
strncat(a, b, x);
printf("%s\n", a);
}

tak to funguje v pohodě, ale když napíšu
int main (void) {

char *a = "dum", *b = "domecek";
int x = 4;
strncat(a, b, x);
printf("%s\n", a);
}

tak mi to hází chybu:/
Dá se to udělat, aby mi to fungovalo i pro char *a = "dum", *b = "domecek"; ?
Resp. můžu nějak převést *proměnná na proměnná[] ?

Nahlásit jako SPAM
IP: 212.96.172.–
KIIV
~ Moderátor
+43
God of flame
4. 10. 2008   #9
-
0
-

To Koja : uz jen zapisem dalsich 5B do retezce a kterej je pripravenej jen na 4B vcetne ukoncovaciho znaku delas velkej kopanec.....

a u tech ukazatelu uz je to fatalni protoze hmatas nekam kam ti system uz nedovoli


EDIT: napadl me primer: mam garaz "a" pro auto s autem A, mam jeste garaz pro nakladak s nakladakem B
jak nacpat nakladak do garaze "a" ikdyz je tam auto A a neni tam ani trochu mista na nakladak B?

zkus se zamyslet...

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #10
-
0
-

Dobry, pochopil sem.
A dá se teda *a převést na a[] ??
Zkoušel sem to pomocí for a pole[i] = argv[1][i], ale vypadá to asi takhle

pes

pes�hf��▒

prostě to tam nechává nějaký náhodny klikyháky vždycky :/ Zkoušel sem to omezim pomocí if (c >= 'a' && c <= 'z'), ale nepomohlo to, nevím proč :/

Nahlásit jako SPAM
IP: 212.96.172.–
Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #11
-
0
-

.. místo toho &#číslo je tam vždycky nějakej určitej znak z ASCII tabulky .. ;)

Nahlásit jako SPAM
IP: 212.96.172.–
KIIV
~ Moderátor
+43
God of flame
4. 10. 2008   #12
-
0
-

nechapu o co se snazis....

kazdopadne kdyz chces prochazet retezec musis pocitat ze retezec ma nejake zakonceni... v C je to '\0' tj. znak s ascii hodnotou 0
pokud prochazis tak musis testovat prvne to...
pak je jednodussi pouzit na to testovani knihovnu ctype.h
ta obsahuje tydle funkce:

isalnum 	test for alphanumeric character

isalpha test for alphabetic character
isblank test for blank character (new in C99)
iscntrl test for control character
isdigit test for digit. Not locale-specific.
isgraph test for graphic character, excluding the space character.
islower test for lowercase character
isprint test for printable character, including the space character.
ispunct test for punctuation character
isspace test for space character
isupper test for uppercase character
isxdigit test for hexadecimal digit. Not locale-specific.


jen si vyberes kterejma to ma projit

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Koja
~ Anonymní uživatel
37 příspěvků
4. 10. 2008   #13
-
0
-

Potřebuju udělat to, co sem psal [url=http://programujte.com/index.php?akce=diskuze&kam=vlakno&tema=10538-prace-s-parametry#86432]tady[/url], ale s tím *a, což nejde, takže to musím převést na a[] ..

Nahlásit jako SPAM
IP: 212.96.172.–
KIIV
~ Moderátor
+43
God of flame
4. 10. 2008   #14
-
0
-

  char * a, *b;

a = malloc(200*sizeof(char)); // zabereme pamet pro a
b = malloc(200*sizeof(char)); // zabereme pamet pro b
strcpy(a,"dum"); // nakopirovat do a "dum"
strcpy(b,"domecek"); // nakopirovat do b "domecek"

int x = 4;
strncat(a, b, x);
printf("%s, %s\n", a,b);


free(a); // uvolnit pamet po a
free(b); // uvolnit pamet po b


pripadne nekdy staci: (char *) a
ale pokud tam neni misto na dalsi znaky a chces do toho neco jeste nacpat tak je to nanic

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Koja
~ Anonymní uživatel
37 příspěvků
6. 10. 2008   #15
-
0
-

To by sice fungovalo, jenže já to přebírám jako argument ve funkci. Asi takhle .. přes *argv[] se to načte do main .. já to jako *promenna převezmu v jiný funkci pomoci funkce(argv[2]); a tam s tím dál pracuju.
Takže tam asi nemůžu napsat potom promenna = malloc(200*sizeof(char));, protože to nefunguje :/

Nahlásit jako SPAM
IP: 81.27.200.–
Koja
~ Anonymní uživatel
37 příspěvků
6. 10. 2008   #16
-
0
-

Vyřešeno :)
Zatím díky za pomoc :)

Nahlásit jako SPAM
IP: 81.27.200.–
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, 21 hostů

Podobná vlákna

Parametry — založil Mara

Parametry — založil paking

Metody, parametry — založil Zbiro

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ý