#include <iostream>
int main()
{
/* Character arrays and string literals */
// Declaration of three arrays in the user data area, read and write permissions for the elements:
char t1[] = {'H','e','l','l','o','\0'};
char t2[] = "Hello";
char t3[] = "Hello";
// Declaration of two pointers in the user data area, read and write permissions for the pointers
// and allocation of the "Hello" literal (possibly) read-only
char *s1 = "Hello"; // s1 points to 'H'
char *s2 = "Hello"; // s2 likely points to the same place
void *v1 = t1, *v2 = t2, *v3 = t3, *v4 = s1, *v5 = s2;
std::cout << v1 << '\t' << v2 << '\t' << v3 << '\t' << v4 << '\t' << v5 <<std::endl;
// the result (v1, v2 v3 are different, v4 and v5 could be the same):
// 0x23fe10 0x23fe00 0x23fdf0 0x404030 0x404030
// assignment to array elements:
*t1 = 'a'; *t2 = 'b'; *t3 = 'c';
// modifying string literal: could be segmentation error:
*s1 = 'd'; *s2 = 'e';
// The type of "Hello" is const char[6].
// const char[] --> char* conversion is only for C reverse compatibility
char *s3 = "Hello"; // warning: deprecated conversion from string constant to 'char*'
const char *s4 = "Hello"; // correct way, no write permission through the pointer
*s4 = 'f'; // syntax error, const-correctness is not flawed
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4oKQp7CiAgLyogQ2hhcmFjdGVyIGFycmF5cyBhbmQgc3RyaW5nIGxpdGVyYWxzICovCgogIC8vIERlY2xhcmF0aW9uIG9mIHRocmVlIGFycmF5cyBpbiB0aGUgdXNlciBkYXRhIGFyZWEsIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgZWxlbWVudHM6CiAgY2hhciB0MVtdID0geydIJywnZScsJ2wnLCdsJywnbycsJ1wwJ307CiAgY2hhciB0MltdID0gIkhlbGxvIjsKICBjaGFyIHQzW10gPSAiSGVsbG8iOwoKICAvLyBEZWNsYXJhdGlvbiBvZiB0d28gcG9pbnRlcnMgaW4gdGhlIHVzZXIgZGF0YSBhcmVhLCByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHBvaW50ZXJzCiAgLy8gYW5kIGFsbG9jYXRpb24gb2YgdGhlICJIZWxsbyIgbGl0ZXJhbCAocG9zc2libHkpIHJlYWQtb25seSAKICBjaGFyICpzMSA9ICJIZWxsbyI7ICAgIC8vIHMxIHBvaW50cyB0byAnSCcKICBjaGFyICpzMiA9ICJIZWxsbyI7ICAgIC8vIHMyIGxpa2VseSBwb2ludHMgdG8gdGhlIHNhbWUgcGxhY2UgICAKCiAgdm9pZCAgKnYxID0gdDEsICp2MiA9IHQyLCAqdjMgPSB0MywgKnY0ID0gczEsICp2NSA9IHMyOwogIHN0ZDo6Y291dCA8PCB2MSA8PCAnXHQnIDw8IHYyIDw8ICdcdCcgPDwgdjMgPDwgJ1x0JyA8PCB2NCA8PCAnXHQnIDw8IHY1IDw8c3RkOjplbmRsOwogIC8vIHRoZSByZXN1bHQgKHYxLCB2MiB2MyBhcmUgZGlmZmVyZW50LCB2NCBhbmQgdjUgY291bGQgYmUgdGhlIHNhbWUpOgogIC8vIDB4MjNmZTEwICAgICAgMHgyM2ZlMDAgICAgICAweDIzZmRmMCAgICAgIDB4NDA0MDMwICAgICAgIDB4NDA0MDMwCgogIC8vIGFzc2lnbm1lbnQgdG8gYXJyYXkgZWxlbWVudHM6CiAgKnQxID0gJ2EnOyAqdDIgPSAnYic7ICp0MyA9ICdjJzsKCiAgLy8gbW9kaWZ5aW5nIHN0cmluZyBsaXRlcmFsOiBjb3VsZCBiZSBzZWdtZW50YXRpb24gZXJyb3I6IAogICpzMSA9ICdkJzsgKnMyID0gJ2UnOwoKICAvLyBUaGUgdHlwZSBvZiAiSGVsbG8iIGlzIGNvbnN0IGNoYXJbNl0uCiAgLy8gY29uc3QgY2hhcltdIC0tPiBjaGFyKiBjb252ZXJzaW9uIGlzIG9ubHkgZm9yIEMgcmV2ZXJzZSBjb21wYXRpYmlsaXR5CiAgICAgICAgY2hhciAqczMgPSAiSGVsbG8iOyAgLy8gd2FybmluZzogZGVwcmVjYXRlZCBjb252ZXJzaW9uIGZyb20gc3RyaW5nIGNvbnN0YW50IHRvICdjaGFyKicKICBjb25zdCBjaGFyICpzNCA9ICJIZWxsbyI7ICAvLyBjb3JyZWN0IHdheSwgbm8gd3JpdGUgcGVybWlzc2lvbiB0aHJvdWdoIHRoZSBwb2ludGVyCiAgKnM0ID0gJ2YnOyAgLy8gc3ludGF4IGVycm9yLCBjb25zdC1jb3JyZWN0bmVzcyBpcyBub3QgZmxhd2VkCgogIHJldHVybiAwOwp9
prog.cpp: In function 'int main()':
prog.cpp:14:14: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char *s1 = "Hello"; // s1 points to 'H'
^
prog.cpp:15:14: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char *s2 = "Hello"; // s2 likely points to the same place
^
prog.cpp:30:20: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char *s3 = "Hello"; // warning: deprecated conversion from string constant to 'char*'
^
prog.cpp:32:7: error: assignment of read-only location '* s4'
*s4 = 'f'; // syntax error, const-correctness is not flawed
^