Returning a NULL string, Crashes compiler?
#1

Hey, a simple question this time, I've never used this method while coding before so I'm not sure how to workaround this:

Say you have a function that returns 0 if it fails:

Code:
func(something)
{
    if(something == somethingelse) return 5;
    return 0;
}
So I did the same thing with a string:


Code:
func(something)
{
    if(something == somethingelse) return somestring;
    return "";
}
This crashes the compiler and so does this:
Code:
func(something)
{
    if(something == somethingelse) return somestring;
    return "<NULL>";
}
I never knew you couldn't return strings like return "this";




So now I'm at a loss and don't know what to return at the end, I can't return nothing because I get a 'must return something' error.
Reply
#2

maybe try return "\0";
i think that's the null char
if that don't work return a 0
and check it with
Code:
if(func(something))
{
    somevar = func(something);
}
Reply
#3

I already said that returning anything like "this" crashes it, that's why "<NULL>" crashed it.
I can't return with 0 because I get a return type mismatch error because one return statement returns an array and the other just returns 0, which is an Integer.
Reply
#4

i see what you mean
ima mess with this ill edit this post in a min.



edit:

the work around would be to pass the var byref to the function also.
Code:
func(something,@vartoset);

//instead of 

vartoset = func(something);
set the vars value in the function using strcpy and return 1 for true and 0 for false.

i think this is done with the @ char but dont quote me on this,


or use the code below.
HTH's
Reply
#5

i'm not sure you can do that.
however you can define a string, and format it, then you return the symbolic name of that string. that way you can correctly return a string, not directly.
Code:
//for example
new string[4];
format( string, 4, "null" );
return string;

// where ...
return "null";
// shouldn't work
Reply
#6

I'm kind of not sure what you want (with the return type), but if you want to return a string value, then yeah the PAWN compiler crashes with string literals. However, it doesn't seem to crash when you return a character array by reference:

Code:
test( )
{
	new szReturn[ 4 ] = { 'h', 'i', '!', '\0' };
	return szReturn;
}
or ..

Code:
test( )
{
	new szReturn[ 4 ] = "hi!";
	return szReturn;
}
Both seem to compile fine for me. I'm not sure if the tag mismatch would be gone, because I don't know what tag you want - I assumed a character array. If you want to return a null string, return '\0' - it's the zero-termination character for strings.

EDIT: Check admantis' code.
Reply
#7

Return a space?
Reply
#8

Make sure that you do return something like
Code:
"\1"
for null strings.
Reply
#9

Thanks for the replies!

I finally went with creating a null temp string and returning that.
I could have used a reference but that means not simply returning the value straight into a function or assignment, it means a new string variable, and that looks a bit more cluttered to me!

Unfortunately I couldn't just create a 1 or 2 cell array as the return sizes had to match, so I had to create a completely useless 256 cell array!

But oh well, problem solved! In case you're wondering it's for an update to my File Script, that will be posted tomorrow after a full bug test (link in my sig)
Reply
#10

I don't understand why you'd need to return a string in pawn when you can just pass the string and return 1 or 0 depending on if it was changed or not

Code:
stock something(text[],len)
{
  if(variable)
  {
    format(text,len,"text%d",1);
    return 1;
  }
  return 0;
}

if(something(string,128)) {
  print(string);
}
else
{
  print("failed something");
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)