在c/c ++中,有些人使用c风格的字符串,如:
char *str = "This is a c-styled string";
Run Code Online (Sandbox Code Playgroud)
我的问题是这样安全吗?我看到它的方式是他们创建了一个char指针,指向const数组的字符的第一个字母,但不能其他一些东西,例如另一个变量覆盖内存中char数组的一部分?因此导致str在逻辑上无效?
这些天字符串常量被放在二进制文件的只读部分中.如果您尝试写入只读部分中的地址,CPU的内存管理单元将导致故障,您的应用程序将获得访问冲突或分段错误或某些其他操作系统相关行为.
此外,如果将字符串常量的类型声明为非常量,则编译器会发出警告.
但不能其他一些东西,例如另一个变量覆盖内存中char数组的一部分?
他们不能这样做.原因是你的C字符串文字是一个常量,正确地说它应该声明为一个:
char const* str = "This is a c-styled string";
Run Code Online (Sandbox Code Playgroud)
您的(非const)代码仅允许与传统C代码兼容.尝试修改数据会导致未定义的行为.