文字の配列を逆の順序で他の文字配列にコピーしようとしています。C++の複雑なこと
これは私の方法である:
ここvoid reversString(char* str){
char* ptr = str;
int i = 0;
// getting length of str/ptr array
while (*(ptr + i) != '\0'){
i = i + 1;
}
char revStr [i];
char * revStrChar = &revStr[0];
int revStrPos = 0;
cout << *(ptr + 3) << endl;
}
私は通常の順序でそれをコピーしようとしていますが、私は入力(「ABCD」)の最後の文字を印刷する場合、ナッシングが起こります。空行のみを出力します。
しかし、私は新しいchar配列の宣言削除する場合:
void reversString(char* str){
char* ptr = str;
int i = 0;
// getting length of str/ptr array
while (*(ptr + i) != '\0'){
i = i + 1;
}
//char revStr [i];
//char * revStrChar = &revStr[0];
//int revStrPos = 0;
cout << *(ptr + 3) << endl;
}
が、それは正しく最後の文字を印刷し、「D」です。私は、新しいchar配列の宣言が出力にどのように影響するのか理解していません! (コンパイラはminGW、OSはWin10)
'文字revStr [i]は、'どこ 'i'は、コンパイル時の定数は、標準C++ではないではありませんこれはコンパイラの拡張機能です。 – TartanLlama
私は1で始めるべきではありません、revStr定数で '\ 0'のスペースを数えていますか? 'strlen'を使って' str'のサイズを数えてみませんか?そして、あなたがポインタ操作を使っているのなら、 'str'を使って' revStr'を宣言してみてはどうでしょうか? 'char * revStr = malloc(sizeof(str));' – TomasCarvalho
'strlen'を使ってください。代わりに、 'std :: string'を使用してください。あるいは単に 'std :: reverse'を使い、この関数を全く書かないでください。 – TartanLlama