while(*a++=*b++);
For those who do not understand what "while(*a++=*b++);" does, I posted a sample in C# for you to know. I use C# beacuse I'm using a shared PC...
The key is that * means for a reference to a type when at type declaration, but when we use it in a statement * means that we want the content that is referenced by the pointer. In the sample below, *a means tha we want the content of the character at the memory at some address that is holded by the pointer a; and when we use a++ we want to move forward the addres of the pointer to the next character. Another thing to know is that when use the assignmente operator = , it returns the value just assgined, so when you type char x = *a = *b; x will have the value just copied from b adress to a adress. Last but not least, the while operator is looking for some value greater than 0 in order to continue the loop. If you remember you C/C++ classes all the strings finishes with a '\0' character that is equal to 0 as an integer value. That´s why the while breakes at the end of the string, and that´s why it´s can be used to copy strings.
Obviously you wont use this code in real life, but could be interesting for those you are not experienced on pointers.
unsafe
{
IntPtr ptrA = Marshal.StringToBSTR("hola"); // Convert Managed String to Unmanaged char array
IntPtr ptrB = Marshal.StringToBSTR("HOLA"); // Convert Managed String to Unmanaged char array
char* a = (char*)ptrA.ToPointer(); // Reference to the first character of string "hola"
char* b = (char*)ptrB.ToPointer(); // Reference to the first character of string "HOLA"
char* start = a; // Keep reference to the first character
while ((*a++ = *b++) != 0); // Do the strcpy
string str = Marshal.PtrToStringBSTR(new IntPtr(start)); // Converto Unmanaged char array to Managed String in order to print
Console.WriteLine("STRCPY Result {0}", str);
Console.WriteLine("Press any key to continue...");
Console.ReadLine();
}
Comments
- Anonymous
March 30, 2009
PingBack from http://blog.a-foton.ru/index.php/2009/03/31/whileab/