これはかなり基本的な質問であり、答えを知っていると確信していますが、間違っていることの結果はセグメンテーション違反であるため、質問する必要があると考えています。私はかなり長い間、次の方法で演算子を使用strlen()
してきnew char[]
ましたが、赤い旗を投げたものに気づきました。
void genericCopy(char *somestring, char *someOtherString) {
someOtherString = new char[strlen(somestring)];
strcpy(someOtherString,somestring);
}
私の質問は、文字列がnullで終了する必要があるため、これを次のように行う必要があるかどうかです。
void genericCopy(char *somestring, char *someOtherString) {
someOtherString = new char[strlen(somestring)+1];
strcpy(someOtherString,somestring);
someOtherString[strlen(someOtherString)] = '\0';
}
これまでのところ、最初の方法で問題が発生したことはありませんが、それは私がそれを正しく行っているという意味ではありません. によって返される長さstrlen()
は、null ターミネータを除いた文字列内の文字数であるため、new は '/0' のスペースを予約していません... 少なくともそうではないと思います。