faqと私が見つけることができるすべてを読んだ後、私はまだ混乱しています。私はこの方法で初期化されるchar型のポインタがある場合:ポインタに値を割り当てることができないのはなぜですか?
char *s = "Hello world!"
を文字列には、読み出し専用メモリであり、私はこのようにそれを変更することはできません。「Wello世界を作るために
*s = 'W';
! "これは私が理解していますが、私の人生では、読まないようにする方法を理解できません。ポインタの代わりに配列を使用する必要がありますか? hereのように?
これは私のコードです:
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;
}
私がこれを読んでいるところでは、あなたの* = 'W'はあなたができないことを知っていることの一例に過ぎません。以下のコードとは何の関係もありません。あなたが実際に助けてくれるものは何ですか?ほとんどの回答が最初の例に焦点を当てているように思われる – jalf
はい、私はそれができないことを知っています:(私はそれを正しく行う方法について疑問を抱いていました。 – pypmannetjies
正確に何をするのですか?私はあなたの質問が何であるかまだまだ不明です。文字列を逆にしようとしていますか? "* s =" W "一部の質問は質問自体と関連があります また、削除によってsegfaultsが発生した場合でも、それらを投稿する必要があります。 – jalf