문제

I've been teaching myself c++ for the last couple days to prepare for my freshman year as a CS major. I'm on C-style strings right now, and wondering what the point of a null terminator is.

I understand that it's necessary, but I guess I just don't fundamentally understand why a string wouldn't just end on its last char.

도움이 되었습니까?

해결책

I just don't fundamentally understand why a string wouldn't just end on its last char.

There are several ways of knowing where is the "last char":

  1. Store the number of characters in the string separately from the string's characters,
  2. Put a marker that indicates the last char of the string, or
  3. Store the pointer to the last char of the string separately from the string's characters.

C choose the second route; other languages (Pascal, etc.) choose the first route. Some implementations of C++ std::string choose the third route* .


* Even std::string implementations that use the first or the third approach null-terminate their buffers for compatibility with the C portions of the library. This is necessary to ensure that c_str() returns a valid C string.

다른 팁

In C and C++, c-strings are stored in a character array. To allow strings of different lengths, these arrays are often allocated much larger than the actual strings they are to contain. For example, a programmer may allocate a char[256] array, which can hold a string with a length anywhere between 0 characters and 255. But the computer has to be able to know exactly how long the string actually is, so it must end with a null character. Otherwise, it would be neccessary for the character array length to be exactly the same as the string (an impractical solution, as allocating and copying memory uses a lot of resources).

Because a c-style string doesn't know what character is the last character. For example if you are reading a name you might make a buffer like so:

char buf[256] // this allows c-style strings that contain 255 characters

But when you go to populate that buffer you may not (likely won't) use all of the space. If you fill it with "Jack", the only information you care about is the first five indices, not all 256.

Consider each character of the string as memory blocks in the memory. If a string is placed in memory. After that a another string is placed adjacent to it , then the computer will think that the 2nd string is joined to 1st ,if null is absent. So, null acts as delimitor

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top