Adventure Game Studio

AGS Support => Advanced Technical Forum => Topic started by: Lt. Smash on Thu 06/03/2008 18:15:45

Title: char* to String* [solved]
Post by: Lt. Smash on Thu 06/03/2008 18:15:45
Hi,
I have this line inside a function:
StrCopy(Tmode[mode].name, name);
and I want to convert it to new style-strings

name is String.
Tmode[mode].name is a char array. Exactly: char name[200];

Tmode[mode].name=name; doesn't work. Error: "cannot assign to cursormode::name". I don't know what I typed but one time I got: "cannot convert char* to String*"

so my question is: How can I translate this old code into new one?
Hope someone can help me.

ps: this is code from the foa-template and I'm using AGS 3.0.1.29.
Title: Re: char* to String*
Post by: naltimari on Thu 06/03/2008 18:55:19
Have you tried to change 'char name[200]' for 'String name' inside your struct? Then the assignment will surely work.

If you dont want to change it, AFAIK there's no way to circumvent StrCopy, because you can not assign a new-style String to a char array without copying every single position (which is what StrCopy does).
Title: Re: char* to String*
Post by: Lt. Smash on Thu 06/03/2008 19:04:09
I actually was looking for a solution without changing the char array but since there is no easy way for that, I will keep that String.
Many thanks!
Title: Re: char* to String* [solved]
Post by: naltimari on Thu 06/03/2008 19:37:16
Well, if you think it's worth the trouble, here's an idea:


struct yourstruct {
  char buffer[200];
  import function copyStringToBuffer(String s);
};

function yourstruct::copyStringToBuffer(String s)
{
  int i = 0;
  while (i < s.Length && i < 199) {
    this.buffer[i] = s.Chars[i];
    i++;
  }
  this.buffer[i] = 0; // put an 'end-of-string' in last char of the array
}


Then, in your code, you'll do:


String s = "my new style string";
structInstance.copyStringToBuffer(s);


Anyway, it's an approach like StrCopy, with the difference that you are going to use new-style strings, and can check 'enforce new-style strings' in the preferences...
Title: Re: char* to String* [solved]
Post by: Pumaman on Thu 06/03/2008 20:04:14
What error were you getting originally? If "name" is a String, and "Tmode[mode].name" is a char[200], then you should be able to use StrCopy without a problem.
Title: Re: char* to String* [solved]
Post by: Lt. Smash on Thu 06/03/2008 20:21:26
Quote from: Pumaman on Thu 06/03/2008 20:04:14
What error were you getting originally? If "name" is a String, and "Tmode[mode].name" is a char[200], then you should be able to use StrCopy without a problem.
Originally there was no problem. The error only occoured when I check "enforce new-style strings". Because I have a mix of old and new style functions, I want to make all to be new-style.