Jump to content
  • 0

pomoc zmatený string


nikitasicek

Dotaz

Čaute, mám problém se stringem, kterej po načtení textu ze souboru vykazuje nějaký divný vlastnosti. K délce stringu přidává 2 znaky a když chci string "okrojit" pomocí strmid, tak se zobrazí prázdno.

	 	new File:soubor_nacist = fopen(cesta,io_read);
     	new str[50],formatovany[50];
     	
     	
      	fread(soubor_nacist,formatovany);

      	format(str,sizeof(str),"%s",formatovany);
      	SendClientMessageToAll(COLOR_RED,str);//ukazuje Test123

		new len = strlen(str);
		new lenstr[50];
      	format(lenstr,sizeof(lenstr),"%d",len);
      	SendClientMessageToAll(COLOR_RED,lenstr); // vrací délku 9, přitom délka je 7(ne nemám tam neviditelný \r\n, je to tam zapsaný ručně)
      	strmid(nInfo[i][property_majitel],str, 0, len-3); //zde se snažím ořezat string z důvodu toho že tam pozděj bude \r\n až se to tam bude zapisovat serverově

		new teststr[50];
      	format(teststr,sizeof(teststr),"%s",nInfo[i][property_majitel]);
      	SendClientMessageToAll(COLOR_RED,teststr); //vrací "", prostě úplně prázdno.

na ty stringy se nedívejte, hledal jsem pomocí nich chybu, abych to měl přehledný.

 

Tady obsah Benzina.sav

 

 


Test123

0

 

 

 

 

Shrnutí:

Ze stringu Test123

mi pomocí strmid(nInfo[property_majitel],str, 0, len-3);

vznikne nic, " ".

A ještě k tomu strlen ukazuje délku stringu o 2 víc.

 

 

Doufám, že mě někdo chápe.

Díky.

Link to comment
Share on other sites

2 odpovědí na tuto otázku

Recommended Posts

  • 0

Par tipu:

stock DelEnd(string[])
{
	new ln = strlen(string);
	if(string[ln-2] == '\r') string[ln-2] = 0;
	else if(string[ln-1] == '\n') string[ln-1] = 0;
	return 1;
}

Tato fce ti z konce textu oreze \r\n \n pokud tam jsou, pokud ne neudela nic. Optimalizovanejsi fci na orezani enteru z konce stringu asi uz neexistuje :)

new teststr[50];
      	format(teststr,sizeof(teststr),"%s",nInfo[i][property_majitel]);
      	SendClientMessageToAll(COLOR_RED,teststr); //vrací "", prostě úplně prázdno.

lze skratit na

SendClientMessageToAll(COLOR_RED,nInfo[i][property_majitel]); //vrací "", prostě úplně prázdno.

vyhody to ma v tom ze se nemusis starat o delku stringu (teda max 144 v chatu), podle ktere by jsi deklaroval format. A je to proste kratsi :)

 

Cely script bych skratil asi takto:

new File:soubor_nacist = fopen(cesta,io_read);
fread(soubor_nacist,nInfo[i][property_majitel]);
DelEnd(nInfo[i][property_majitel]);
SendClientMessageToAll(COLOR_RED,nInfo[i][property_majitel]);

Nevidim duvod tamtech promenych, akorat si tim zaplnujes zasobnik :)

A nezapomen na fclose

 

a doufam ze v enum to mas nejak takto:

enum
{
property_majitel[MAX_PLAYER_NAME]
}
Edited by ATomas
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...