字符串常量的修改:
- char str[]:
str[1] = '2';
是对数组str
的直接元素访问和赋值。由于str
是一个可修改的字符数组,因此这行代码合法地将数组中索引为1的位置(即第二个字符)的值改为'2'
。 - char *p: 初始化为指向字符串字面量
"Hello,World!"
。这里的字符串字面量通常存储在程序的只读数据段(read-only data segment),对它进行修改是未定义行为 - const char*: 即使通过const_cast移除const属性,但由于它指向的是一个字符串常量的地址,而字符串常量位于内存的只读区域不允许修改,对它进行修改也是未定义行为
#include <iostream>
using namespace std;
int main()
{
char str[] = "Hello,World!";
str[1] = '2';
char *p = "Hello,World!";
//*(p++) = 'a';
const char *const_p = "Hello,World!";
char *p1 = const_cast<char*>(const_p);
//*(p1++) = '1';
std::cout<<str<<std::endl;
return 0;
}
const char*的修改
- 我们不能这样修改const char* 因为*(p1)实际上指向的还是Hello,World的内存区域,但是这块内存区域是不可读的
const char *const_p = "Hello,World!";
char *p1 = const_cast<char*>(const_p);
*(p1++) = '1';
- 如果我们要用取消一个const char*的const属性,首先要保证它指向的是一个可修改的字符数组
char str[] = "Hello,World!";
const char *str1 = str;
char * p = const_cast<char*>(str1);
*(p +2) = 'a';
std::cout<<str<<std::endl;
各种字符串之间的互转:
- char[] 转char*: 转换后可以通过取char*的指针来修改char[]的值
char strArray[] = "Initial Array";
char *strPointer = strArray;
// 可以通过strPointer指针修改strArray数组的值,
- char*转char[]:因为数组要提前分配大小 这样他压根不知道大小是多少。并且数组必须是获取一个序列的数组 而不能直接是一个地址。
char *strPointer = "Array Pointer";
//char strArray[] = strPointer; 不能这样赋值
// 需要先分配内存
char strArray[strlen(strPointer) - 1];
strcpy(strArray,strPointer);
-
char strArray[] 转 const char*
char strArray[] = "Initial Array";
const char *strConst = strArray;
- const char*转 char strArray[]
const char *strConst = "Array Pointer";
char strArray[strlen(strConst) + 1];
strcpy(strArray,strConst);
cout<<strArray;
- const char*转string
const char *strConst = "Array Pointer";
string str = strConst;
- string 转const char*
string str = "Array Pointer";
//const char *strConst = str.c_str(); 这样也可以
const char *strConst = str.data();
- string转char*
string str = "Array Pointer";
char *strConst = (char*)str.data();
// 第二种方式
string str = "Array Pointer";
char strConst[str.length() +1 ];
strcpy(strConst,str.c_str());
char * strChar = strConst;
- char*转string
char * strChar = "Array Pointer";
string str = strChar;
- string 转 char[]
string str = "Array Pointer";
char strConst[str.length() +1 ];
strcpy(strConst,str.c_str());
- char[]转string
char strConst[]= "Array Pointer";
string str = strConst;