06.04.2011, 06:03
Todo depende del caso, cuando trabajas con strings dinбmicos lo normal es crear una constante con el mбximo de celdillas permitidas, estas celdillas para los que no lo sepan se guardan en la memoria ram, y el carбcter nulo es usado para que una funciуn que lea en la memoria pueda determinar el fin de cadena, por que sino, funciones como printf seguirнan aumentando celdillas y imprimiendo "basura". Para comprender todo esto recomiendo la lectura de libros de C/C++. El manejo de punteros y la asignaciуn dinбmica de memoria a "bajo nivel" que ofrece estos lenguajes te darб una experiencia inolvidable. Volviendo a lo anterior, funciones como "realloc" en C/C++ permiten realojar el tamaсo de un bloque de memoria y crear strings dinбmicos. Creo que explicas mal la situaciуn, ya que tu estбs usando un tamaсo semi-estбtico, lo del semi estбtico es por que lo ъnico que variarб sera el tamaсo del nick, que aunque sabemos que es < que MAX_PLAYER_NAME no sabes el tamaсo exacto que tendrбn los nicks al momento de compilar.
En ese caso si, es 21 + MAX_PLAYER_NAME + Null Char, pero en el caso de que sea una cadena introducida por ejemplo, en un Diбlogo, simplemente marcas un mбximo, #define MAX_INPUT_TEXT 124 por ejemplo, creo que pawn tiene librerнas estбndar para alojamiento dinбmico de memoria, de todos modos, y como bien explica ******, si el SA-MP tiene un input y un output que no puede superar las 128 celdillas ( 512 bytes, cada carбcter en memoria ocupa 4 bytes, 4 * 128 = 512) todo se reduce a eso, asignar 128 celdillas a las cadenas y ya fuй
Quote:
if(strcmp(cmdtext, "/yosoynoob", true) == 0) { new string[128], J[MAX_PLAYER_NAME]; GetPlayerName(playerid, J, sizeof(J)); format(string, sizeof(string), "Jugador %s es mucho noob", J); return SendClientMessageToAll(0xFFF000AA, string); } |