在阅读了常见问题解答和我能找到的所有其他内容之后,我仍然感到困惑。如果我有一个以这种方式初始化的 char 指针:
char *s = "Hello world!"
该字符串位于只读内存中,我无法像这样更改它:
*s = 'W';
制作“Wello world!”。我明白这一点,但我不能,就我的一生,了解如何使它不是只读的。我必须使用数组而不是指针吗?喜欢这里吗?
这是我的代码:
char *s = str;
char *e = s;
while (*e != '\0')
e++;
e--;
char *temp;
//Swop the string around
while (s <= e) {
*temp = *s;
*s = *e;
*e = *temp;
e--;
s++;
}
错误消息只是一个分段错误。如果这是一个非常愚蠢的问题,请提前道歉。
非常感谢所有的帮助。在听取了你所有的建议后,我明白了:
void something(char * str) {
char *store = str;
char *s = new char[strlen(str) + 1]; //Allocate memory. Nice one.
strcpy(s, str);
char *e = new char[strlen(str) + 1];
strcpy(e, str);
while (*e != '\0')
e++;
e--;
char temp; //no longer a pointer
while (s <= e) {
cout << *e;
temp = *s;
*s = *e;
*e = temp;
e--;
s++;
}
delete [] e;
delete [] s;
}
但是,函数末尾的删除似乎导致了它们自己的分段错误。为什么?
为了兴趣起见:错误是由于在递增后访问 e 和 s 指针。一个更简单的解决方案随之而来:
void something(char * str) {
char *s = new char[strlen(str) + 1];
strcpy(s, str);
char temp;
int j = strlen(str) - 1;
for (int i = 0; i <= strlen(str)/2; i++) {
cout << s << endl;
temp = s[i];
s[i] = s[j];
s[j] = temp;
j--;
}
delete [] s;
}