STRINGS
1. Characteristic: Unmodifiable
-A string is a sequence of characters, terminated by the null terminator character '\0'. It has a numerical value 0, but since we cannot type this normally, it is written with a backslash.
-Strings are a subset of arrays of characters.
-We should use const when declaring a pointer pointing to a string. But if we forget to do so, the program will still compile. However, when we want to modify the string, the program will crash with a segmentation fault. (Hardware will trap into the operating system)
-String literals are typically placed in a read-only portion of the static data section for their entire lifetime of the program. i.e. since loader -> memory until exit
-After initializing, loader marks the read-only portions as non-writeable in the page table. (This is the structure that the operating system maintains to describe the program's memory to hardware)
2. Mutable Strings
-If we want our strings to be mutable, we have to declare an array of chars with sufficient space to hold all of its characters plus its terminator.
Then, it will not be regarded as a pointer, but an array of characters.
-We should keep enough space for '\0' terminator!! If not, compiler will not complain. Valgrind (a tool) can detect these kinds of errors.
-Programmers should always keep track of the size of his/her arrays since there's no way to derive its size!! "sizeof" it not accurate! It only represents the original size.
3. String Equality
- '==' compares if pointers point to the same thing but not the characters.
-strEqual function
int strEqual (const char * str1, const char* str2) {const char * p1 = str1;const char * p2 = str2;while(*p1 == *p2) {if (*p1 == *p2) {if(*p1 == '\0') {return 1;}}}return 0;}
The above function is common and is involved in string.h of the C Library.
4. Copying
-Similar to above, and we can use library to implement this function. There are two for copy, one is strncpy, one is strcpy. But the latter one is dangerous because there's no way to tell how much space is available in the destination. And if there's no sufficient space, the strcpy will overwrite whatever follows it in memory! DANGEROUS!
5. Converting
-We cannot convert string to integer or float by casting, either implicit or explicit. If so, there will be error message.
-We can use atoi library to translate string to int by interpreting the sequence of characters as a decimal number. strtol can allow us to specify the base(decimal, hexadecimal, etc. )
summary& understanding after reading <<All of Programming>> chapter 10
Comments
Post a Comment