Why can't I edit a char in a char*?

蓝咒 提交于 2019-12-01 04:41:53

Your code sets a to a pointer to "abc", which is literal data that can't be modified. The Bus error occurs when your code violates this restriction, and tries to modify the value.

try this instead:

char a[] = "abc";
a[0] = 'c';

That creates a char array (in your program's normal data space), and copies the contents of the string literal into your array. Now you should have no trouble making changes to it.

You are trying to modify a string constant. Use this instead:

char a[] = "abc";
a[0] = 'c';

This

char* a = "abc";

relies on a dangerous implicit conversion from const char[] (the type of a string literal) to char*. (In C++ this conversion has been deprecated for more than a decade. I don't know about C, though.)

A string literal must not be altered.

char *a = "abc"; is a constant string stored in the .data section of an ELF binary. You are not allowed to modify this memory and if you do you incur undefined behavior in some cases it will give no error but not modify the memory in your case you get a bus error because you are attempting to access memory that you normally cannot (for writing purposes)

char *str = "string"; In such a case it is treated as a read only literal. It is similar to writing 'const char *str = "string"'. Which is to say that the value pointed to by the pointer 'str' is a constant. Trying to edit will result in BUS ERROR.

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