1: // Filename: CSTR1.CPP 2: // Purpose: Illustrates C-style strings: declaration, initialization, 3: // copying, concatenation, computing length, output with cout. 5: #include <iostream> 6: #include <cstring> 7: using namespace std; 9: #include "PAUSE.H" 11: int main() 12: { 13: cout << endl; 14: cout << "This program illustrates declaration, " 15: << "initialization, copying, concatenation, " << endl 16: << "and output with cout, of C-strings. " 17: << "Study the source code while running it. " << endl; 18: cout << endl; 19: Pause(0); 21: // You can initialize a C-string variable in its declaration: 22: char s1[8] = "Hello, "; // OK 23: char s2[] = "world!"; // OK, and also avoids character counting! 25: // But you can't assign to a C-string variable after declaring it: 26: // char s3[21]; 27: // s3 = "Hello, world!"; // Not OK; gives a compile-time error 29: // So, you have to "copy", *not* assign, one string to another: 30: char s3[21]; 31: strcpy(s3, s1); // Note that the copying is *from* s1 *to* s3. 33: // This is how we append string s2 to the end of string s3: 34: strcat(s3, s2); 36: // Now we print out the three strings and their lengths: 37: cout << "Length of \"" << s1 << "\" is " << strlen(s1) << "." << endl; 38: cout << "Length of \"" << s2 << "\" is " << strlen(s2) << "." << endl; 39: cout << "Length of \"" << s3 << "\" is " << strlen(s3) << "." << endl; 40: Pause(0); 42: // We can also use "typedef" to define a "C-string type", as in 43: typedef char String20[21]; // The "extra" location is for the '\0'. 45: // Note that strcpy may also be treated as a value-returning 46: // function that actually returns the string result of the copy. 47: String20 s4, s5; 48: cout << strcpy(s4, "How are you?") << "<<" << endl; // Here we are 49: cout << strcpy(s5, "Fine!") << "<<" << endl; // displaying the 50: Pause(0); // return-value of function strcpy. 52: // Note that copying a shorter string to a longer string 53: // "does the right thing" and puts the '\0' in the right place. 54: cout << s4 << "<<" << endl; 55: strcpy(s4, s5); 56: cout << s4 << "<<" << endl; 57: Pause(0); 59: return 0; 60: }