String literals: pointer vs. char array

橙三吉。 提交于 2019-11-27 11:59:10
LihO

You can look at string literal as "a sequence of characters surrounded by double quotes". This string is stored at read-only memory and trying to modify this memory leads to undefined behavior.

So how come that you get segmentation fault?
- The main point is that char *ptr = "string literal" makes ptr to point to the read-only memory where your string literal is stored. So when you try to access this memory: ptr[0] = 'X' (which is by the way equivalent to *(ptr + 0) = 'X'), it is a memory access violation.

On the other hand: char b[] = "string2"; allocates memory and copies string "string2" into it, thus modifying it is valid. This memory is freed when b goes out of scope.

Have a look at Literal string initializer for a character array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!