我确信这对大多数人来说都是一个简单的问题,但我很难弄清楚为什么我不能操纵这种刺痛,而且我应该如何去做。例如,我们有:
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 *
答案 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;
我希望这能解决你的问题。