Prekopírovanie reťazca do poľa reťazcov – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prekopírovanie reťazca do poľa reťazcov – C / C++ – Fórum – Programujte.comPrekopírovanie reťazca do poľa reťazcov – C / C++ – Fórum – Programujte.com

 

Kent0
Stálý člen
9. 11. 2013   #1
-
0
-

Dobrý deň, mám jeden problém.

ako mám prekopírovať reťazec do poľa reťazcov? Napr. keď mám definované char slovo[20] a char *pole[5]..a čítam zo súboru slová a chcem ich prekopírovať do *pole.

Skúsil som to nejak takto ale program mi nefunguje.  

char slovo1[20];
int i=0;
while(feof(f)==0)
{
	fscanf(f,"%s",slovo1);
	i++;
}
rewind(f);
char *slovo[i];
i=0;
while(feof(f)==0)
{
	fscanf(f,"%s",slovo1);
	strcpy(slovo[i],slovo1);
	i++;
}
Nahlásit jako SPAM
IP: 178.253.132.–
KIIV
~ Moderátor
+43
God of flame
9. 11. 2013   #2
-
0
-

pole slovo neobsahuje validni pointery .. musis je nejprve udelat nebo pouzit neco jako strdup

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
9. 11. 2013   #3
-
0
-

#2 KIIV
a nedalo by sa to spraviť inak? Lebo slovo "validný pointer" počujem prvý krát a aj "strdup" 

Nahlásit jako SPAM
IP: 178.253.132.–
KIIV
~ Moderátor
+43
God of flame
9. 11. 2013   #4
-
0
-

pak nesmis pouzivat pointery

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
9. 11. 2013   #5
-
0
-

#4 KIIV
tak to teda musím vymyslieť niečo iné 

Nahlásit jako SPAM
IP: 178.253.132.–
vitamin+8
Grafoman
9. 11. 2013   #6
-
0
-

#5 Kent 

Nastuduj si dynamicku alokaciu pamete.

int main(){
	char* str;	//neinicializovany pointer

	str = malloc(sizeof(char) * 20);	//alokujes pole znakov s 20 prvkami
	
	strcpy(str, "wtf omg lol");	//prekopirujes do pola string
	//...

	free(str);	//uvolnis alokovane pole


}
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kent0
Stálý člen
9. 11. 2013   #7
-
0
-

#6 vitamin
dynamickú alokáciu viem :)..ale ja keď načítam tie slová zo súboru tak všetky musím niekde uložiť lebo ich budem ešte potrebovať.

Nahlásit jako SPAM
IP: 178.253.132.–
vitamin+8
Grafoman
9. 11. 2013   #8
-
0
-

#7 Kent

int main(){
	char** words;
	const size_t POCET_SLOV = 314;
	words = malloc(sizeof(char*)* POCET_SLOV);	
	
	char buff[200];	//pomocny buffer
	size_t index = 0;
	while(index < POCET_SLOV){
		scanf("%s", buff);
		words[index] = malloc(sizeof(char)*(strlen(buff)+1));	//alokujes miesto kam ulozis slovo
		strcpy(words[index], buff);	//prekopirujes obsah z pomocneho buffera do alokovaneho pola
	}

	for(size_t i = 0; i < index; ++i)
		free(words[i]);

	free(words);


}
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kent0
Stálý člen
9. 11. 2013   #9
-
0
-

#8 vitamin 

                char slovo1[20];
		int i=0,pom=0;
		while(feof(f)==0)
		{
			fscanf(f,"%s",slovo1);
			i++;
		}
		rewind(f);
		char **slovo,l;
		slovo=malloc(sizeof(char*)*i); //hlasi chybu..invalid conversion from 'void*' to 'char**'
		while(feof(f)==0)
		{
			fscanf(f,"%s",slovo1);
			l=strlen(slovo1)+1;
			slovo[pom]=malloc(sizeof(char)*l);
			strcpy(slovo[pom],slovo1);
			pom++;
		}

takto som to spravil ale hádže mi chybu

Nahlásit jako SPAM
IP: 178.253.132.–
vitamin+8
Grafoman
9. 11. 2013   #10
-
0
-

#9 Kent
Asi pouivas c++ kompilator, takze to musis pretypovat na char**

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #11
-
0
-

no jestli pouziva c++, tak mohl rovnou pouzit vector<string> a usetrit si praci s dynamickou alokaci (a hlavne s uvolnovanim pameti)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 6 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ý