Christopher Carver wrote: > On Sat, 2007-12-22 at 23:20 -0700, Thomas Hruska wrote: >> Christopher Carver wrote: >>> I think I'm straight forward and I find to many cooks in the kitchen >>> arguing what to call s spoon, that they forget to make the soup. >> Call it >>> half a dozen or six and it's the same thing. >>> >>> For the original poster, strings in C and strings in C++ can be >>> different depending on who and what train of thinking they have and >> what >>> context the two are talking about. But basically it's nothing more >> than >>> a series of bytes with a terminating character at the end. That's >> not >>> 100% true all the time, but usually the case. >> Wrong. I don't use null-terminators for in-memory data storage. I >> haven't done that for almost a decade (since 1998). Using a special >> character to signify the end of a chunk of data was and still is one >> of >> the worst ideas _ever_. That alone has caused WAY more problems >> (buffer >> overflows, etc.) than I care to count. >> > > I quote: > > A byte with all bits set to 0, called the null character, shall exist in > the basic execution character set; it is used to terminate a character > string literal. > - ANSI/ISO 9899:1990 (the ANSI C standard), section 5.2.1 > > A string is a contiguous sequence of characters terminated by and > including the first null character. > - ANSI/ISO 9899:1990 (the ANSI C standard), section 7.1.1 > > It's not the worst idea ever, because without a null termination > character you are forced to use a storage data type to specify the > length of the data. If the data length is beyond that of the storage > data can hold, the code behavior will become unknown or the coder has to > compensate. Buffer overflows is writing past the allocated storage and > has nothing to do with null terminators. If a coder doesn't compensate > for the null termination, then that's the coders fault, not the > methodology. If you don't use null terminators, then I can safety assume > you just use C++ strings. And that's great, but don't disparage C as a > lessor extent.
Is _one_ of the worst ideas ever (I never said 'the worst'). I know what a buffer overflow is. You seem to think there is a difference between ANSI C and ANSI C++ with regards to the underlying usage of memory. There isn't. Using a special character to signify the termination of data has and always will be a bad idea inherited from the DOS days of yore. C is outmoded and outdated. All new software programs (and even existing ones) should be [re]written in C++ even if classes and templates are not used. However, the specific class/template features of C++ offer methods of eliminating the possibility of buffer overflows in the first place. Something that C simply can't offer. > The poster needed away to copy one string to another without the use of > strcpy() functions, so we are talking about ANSI-C strings; though K&R > strings are the exact same; hence a null terminator. I provided helpful > information without giving a blatant answer or a canned non-helpful > response. I think most folks can Google or go to bookstores. Giving some > actual helpful pointers (haha, pointers) is not only more helpful, but > friendlier than cut and paste canned responses. The canned response was WAY more helpful than your recommendation of a non-ANSI Standard book that will lead the OP astray. And my response included a list of books that they should be reading by authors who adhere to the ANSI Standard. > The "Understanding Pointers In C" by Yashavant is all standard C > operations, so it will run on all C compilers on any platform. Show me a > snippet from the book I mention that does not work on any platform or > compiler. The same rules apply from C89 to C99 compliant compilers. I > can not comment on his other works. But this is an excellent book that > takes great care in explaining and showing all the different aspects of > memory handling. Far more than most C books and far greater than most C > ++ books will ever tread. > > After reading your response, I know you have not read this book. http://www.linuxbazar.com/index.php?main_page=product_info&products_id=5697 One of the topics in the list is: "Near, far and huge pointers." That's all I need to know. That's not only non-ANSI Standard, it is badly outdated (16-bit days of Turbo C). Yashavant causes more damage than not. Maybe he's fixed it in some newer edition but I seriously doubt it and his older editions populate the world like a plague. Even Wikipedia confirms that his books (including the one you recommend) are Non-Standard: http://en.wikipedia.org/wiki/Yashavant_Kanetkar I now have even less reason to read that book and you should still not be recommending it. There is a list of recommended books that this list uses and I generally trust the judgment of the people here who have put that list together. -- Thomas Hruska CubicleSoft President Ph: 517-803-4197 *NEW* MyTaskFocus 1.1 Get on task. Stay on task. http://www.CubicleSoft.com/MyTaskFocus/
