First,in C++. string a,b;
a=b is the same as a.assign(b).It's just like strcpy(). You need not think about the address .You need give up the think-style in C. Also,in C++,when you use a class(like string).You need not think about is the memorize free. C++ will do this for you. And,s="" is the same as s.clear(),but this doesn't mean the memorize is free. It's just means the value of the string is "". Don't think about how to set the memorize of a string object free. When you define a string. C++ will set the memorize of it for you. To: [email protected] From: [email protected] Date: Sun, 22 Aug 2010 19:48:30 -0400 Subject: [c-prog] Questions on C++ strings I have an older C program where I built a structure for a linked list and I'm trying to make it C++, including using C++ constructs. I have some questions on how strings work. Currently, the structure contains char arrays but I'd rather they be strings, but I'm not clear on the details. For example, when I want to copy an existing node to a new list node, with char arrays (slist is the source list node), I (abbreviated): tlist = new struct ENTRY; // Create a new instance of the list structure tlist->title = new char[strlen(slist->title) + 1]; // Allocate memory for the destination title string if ( tlist->title == (char *)NULL ) // the allocation failed cerr << "Failed to allocate new list data (" << (strlen(slist->title) + 1 ) << " bytes) for the title" << endl ; else strcpy(tlist->title, slist->title); // The allocation succeeded, copy the source string to the destination string ------------------ Since I strcpy() the text to the new char array, the data is safe if/when I delete [] the slist (source) entry. With strings, I could set the title with either tlist->title = slist->title; OR tlist->title.assign(slist->title); I'm guessing the difference is similar to: tlist->title = slist->title; // copy the ADDRESS of the source title to the dest title; If the source title is delete[] ed, the destination title is invalidated If I assign() the title, I'm guessing it is similar to strcpy()ing from the source to destination, and the source is still valid even if I delete the source structure, slist. So, I am assuming tlist->title.assign(slist->title); is the proper way to "copy" the title string. Can someone please confirm or deny and clarify my assumptions? Also, to clear a string, I can use either: string str; str = ""; OR str.clear(); I have read somewhere that clear() does not actually empty the string, but my testing shows that it does. That is str.clear(); if (str.empty()) cout << "The string is empty" << endl; else cout << "The string is not empty" << endl; shows that the string is, in fact, empty. [Non-text portions of this message have been removed]
