Problema con un parametro (&string[])
#1

Bueno, estoy intentando pasar un valor por una funciуn, y que la modifique pero sin que la retorne

Код:
stock ColocarAlgo(&str[])
{
	//str = "Texto Aqui";
	strmid(str, "Texto Aqui", 0, 10, 10);
}

public OnGameModeExit()
{
	new st[10];
        ColocarAlgo(st);
        print(st);
	return 1;
}
pero me da este error
Код:
error 067: variable cannot be both a reference and an array (variable "str")
y no se como se solucionarнa.

De antemano, Gracias.
Reply
#2

pawn Код:
stock ColocarAlgo(str[])
{
    //str = "Texto Aqui";
    strmid(str, "Texto Aqui", 0, 10, 10);
}
que pretendes hacer ??
Reply
#3

Algo como esto:
Quote:
Originally Posted by Dreyfuz
Посмотреть сообщение
pawn Код:
//Esto seria sin el & antes del parametro
main()
{
    new Un_Valor;
    Un_Valor = 100;
   
    Sumar(Un_Valor);//Se envia el valor de la variable, que es 100
    printf("%i", Un_Valor);//Imprime el valor de la variable que es 100(No se modifico en Sumar())
}

stock Sumar(valor)
{
    valor = valor + 100;
}
pawn Код:
//Esto seria con el & antes del parametro
main()
{
    new Un_Valor;
    Un_Valor = 100;

    Sumar(Un_Valor);//Se envia el valor de la variable, que es 100
    printf("%i", Un_Valor);//Imprime el valor de la variable que es 200(Ya que se modifico en Sumar())
}

stock Sumar(&valor)
{
    valor = valor + 100;
}
Pero con strings
Reply
#4

Si no me equivoco creo que no se puede ._.
Reply
#5

Wo. Eso seria malo
Reply
#6

Lo que tu quieres es pasar por referencia y no por valor.
Para pasar un entero/booleano/decimal o cualquier valor que no sea un array, debes colocar el '&' delante para que dicha variable sea modificada (pasada por referencia), caso contrario no sera modificada.
Ej:
pawn Код:
stock PorValor(value)
{
    value++;

    return 1;
}

stock PorReferencia(&value)
{
    value++;

    return 1;
}

main()
{
    new
        val = 100;
   
    PorValor(val);
    printf("val: %i", val);//Escribira en la consola "val: 100"

    PorReferencia(val);
    printf("val: %i", val);//Escribira en la consola "val: 101"
}
Ahora bien, los arrays son pasados por defecto por referencia, por lo cual si no queremos que estos sean modificados debemos agregar 'const' delante de los mismos.
Ej:
pawn Код:
stock PorValor(const array[])
{
    if(array[0] != '\0')
        array[0] = 'H';//<--- Error de compilacion por intentar modificar un array constante

    return 1;
}

stock PorReferencia(array[])
{
    if(array[0] != '\0')
        array[0] = 'H';

    return 1;
}

public OnFilterScriptInit()
{
    new
        arr[] = "ola";

    PorValor(arr);
    printf("arr: %s", arr);//Escribira en la consola "arr: ola"

    PorReferencia(arr);
    printf("arr: %s", arr);//Escribira en la consola "arr: Hola"
}
Reply
#7

... Todo ese error, solo por tener el & al principio, sol tenia que quitarlo. No sabia que para pasar un string por referencia no era necesario el & antes del parбmetro, aъn me falta mucho en programaciуn.

Gracias Chaoz
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)