Write permission for char*
一致问题:需要能够修改C++中的char内容。
我有一个类似这样的函数:char*buffer=(char*)函数
现在我需要修改"buffer",例如,执行类似于此buffer[1]="h"的操作;
我所尝试的是:char*string="你好,世界";char buffer[65];//我仍然需要知道确切的大小strcpy(缓冲区,字符串);buffer[1]="R";
我也试过和Malloc合作。不幸的是,编译器总是抱怨:"无法从const char[2]转换为char"。这发生在Windows上。我对G++编译器没有这样的问题。
我看了下面的链接,但还是做不到任何事情。http://www.developerweb.net/forum/archive/index.php/t-3517.html网站关于C中的字符指针是否可以在C中修改一个字符字符串?
谢谢
因为你的问题是C++的标记,所以我必须质疑你使用原始char的意图,除非你很有信心,否则它是不推荐的。
其次,char*或char[]非常适合修改。问题是,您在"hello world"中创建了一个const char*,然后试图使其中的一个字符等于一个字符串。字符不是字符串。"r"是一个字符串,它是一个常量char*。所以您试图将常量char*等同于char,这是一个错误。你的意思是"r",这是个字符。
更好的代码是:
1 2 3 4 5 | std::string mystring((char*)FUNCTION); // assume that FUNCTION // will free it's own memory. if (index < mystring.size()) mystring[index] = 'r'; // mystring now cleans up it's own memory in all cases. |
不能更改*char string="hello world",因为字符串是"只读"的,但可以使用char string[]=…它将编译器排列成可修改的数组:
1 2 3 4 | char * strReadOnly ="read-only-data"; //strReadOnly [3] = '0'; //access violation char stReadWrite [] ="read-write-data"; stReadWrite [3] = '0'; // Ok, but just make sure that indexes are in range |
要将字符串复制到另一个可以更改的缓冲区中,可以执行以下操作:
1 2 3 4 5 6 7 | char * src ="read-only-data"; const int len = strlen(src); char * dst = new char[len+1]; strcpy(dst, src); dst[3] = '0'; // ok to change delete [] dst; // don't forget to delete dst |
你的问题是在引号中,你必须使用
试试
x-是要更改的字符位置。.
您必须理解以下两行之间存在差异:
1 2 | char myArray[] ="Hello Mars!"; char* myPointer ="Hello World!"; |
第一个创建了一个可以操作的字符数组。整个数组将在堆栈上分配。
第二个使用字符串文字初始化指向char的指针(C语言的特殊构造允许这样做)。这是一个常数。您将得到它的地址,但它实际上是一个常量字符数组。具体实施如下:
字符串将按字面顺序存储在内存中的可执行映像中(作为HDD上文件的相同副本),您将获得指向该字符串的指针。将在堆栈上为指针
在堆栈或堆中C++的全局内存管理?
编辑:关于指针和数组
使它不可变的不是
1 | myPointer = myArray; |
1 | myPointer[3] = 'Z'; |
如果你想对这一点有一个全面的了解,请阅读一些像这样的教程。
论永恒
常量可能会混淆,尤其是指针。
1 | const char* const myPointer2 = myPointer; |
第一个常量使字符成为常量,因此不能使用
有关详细信息,请参阅此说明。