如何操纵指向的字符串

时间:2014-01-22 23:35:21

标签: c++ string pointers

我确信这对大多数人来说都是一个简单的问题,但我很难弄清楚为什么我不能操纵这种刺痛,而且我应该如何去做。例如,我们有:

char *str1="Hello World";

我想要做的就是操纵'str1'指向的字符串。例如,如下所示,我可以输出字符串并查看原始字符串。然后我可以在那里添加一个空字符并缩短它。

cout << str1 << '\n';
str1[5] = '\0';
cout << str1;

我也试过了:

cout << str1 << '\n';
*(str1+4) = '\0';
cout << str1;

无论哪种方式,我都希望看到类似的东西:

Hello World
Hello

我在两种情况下都遇到的错误是当我尝试改变字符串时。我知道将str1声明为数组(char str1[] = ....)会更容易,但是我给了必须使用可怕的char *

的约束

3 个答案:

答案 0 :(得分:4)

字符串文字存储在只读内存中。你无法修改它们。事实上,在现代C ++中,尝试以您的方式初始化str1会产生错误。它应该是const char*

const char* str1 = "Hello World";

这清楚地表明您不应该修改char

如果你想要一个你可以操作的字符串的副本,你应该使str1成为一个数组:

char str1[] = "Hello World";

使用字符串文字初始化数组时,会将字符复制到数组中。

答案 1 :(得分:0)

所以在我收到你的所有帮助后,我首先确定了字符串的长度,初始化相同大小的数组+ 1,然后迭代原始数据以将其保存到数组中。然后我就能够随心所欲地操纵它。

int someFunc(char *inpStr){
     int counter = 0;

     //Find the length of the input string
     while(inpStr[counter]!='\0'){counter++;}

     //Input initialize an array of same size
     char strArray[counter+1];

     //Copy whats in the char *   to the array and make sure it ends with null
     for(int i=0;i<=counter;i++){strArray[i]=*(inpStr+i);}
     strArray[counter]='\0';

     .....
return 0;
}

感谢您的帮助!

答案 2 :(得分:-1)

为什么你不能改变str1已经被约瑟夫恰当地解释了。但是如果你想修改它,你可以使用这样的东西:

char *str = "hello";
char *ptr = new char[strlen(str)+1];
strcpy(ptr,str);
ptr[2] = 'd';
str = ptr;

我希望这能解决你的问题。