DAVID J.マラン:だからそれはことが判明 文字列をコピーすることはほぼ同じではありません プリミティブをコピーするような単純な、 intやfloat型などがある。 結局のところ、ボンネットの下に文字列 シーケンス文字である。 ため、文字列をコピーするため、必要があります の全配列をコピーすることが含ま 文字。 それではそれに戻って私たちの目を向けてみましょう 最後の実装とこれをリッピング 行、列tは、秒に等しい 明らかに十分ではなかった。 それではその行と交換してみましょう このように、代わりに、見えます。 文字列tは、文字列長のmalloc関数を取得します CHARのSプラス1倍の大きさ。 今行くビットが引用あります このコード行中に。 まず、malloc関数はメモリの略 割り当て、 この関数はまさにそれを行います。 整数を考えると、それはあなたに戻ります のメモリチャンクのアドレス 多くのバイト数。 一方、文字列sの長さプラス1 我々が望むことを示すことを意味する Sはすでに占有するバイト数、 そのヌルターミネータを含む 文字列の末尾にバックスラッシュ0。 その間、私は必ずしも覚えていません チャーはあっても、どのように大きな ほとんどのシステムでは、単に1だけれども バイトなので、私はする文字のサイズを呼ぶことにします どのように大きな動的に把握 個々の文字です。 一度一緒に乗じ、私が取り戻す 私は必要なバイト数の合計。 しかし、malloc関数はに何を失敗した場合 我々が必要とするメモリを返す? 次のように私は最高のものをチェックしたいと思います。 Tがnullに等しい場合は、私が最初に行くよ 自由なsに、メモリがGETによって返さ 文字列、その後、私はするつもりだ エラーを示すために、1を返します。 もし問題がないけど、私は続行するつもりだ 4ループを使用して繰り返し処理する 以下の通りである。 int型のために私は0を取得し、Nに等しく Sの文字列の長さ。 私は長い間、私はあるとして、これを行うつもりだ n以下となるよう、私 通って反復処理を含む s内のヌル終端文字。 そして、それぞれの反復で、私は今 私をインクリメントする予定。 一方、このループの内側に、コピー Tのi番目にS年代のi番目の文字 場所、それがTを行うには十分である ブラケット私はSブラケットIを取得します。 私は最高の、追加の1を追加したい 自分のコードへのライン。 特に、私は今使用しているので、 malloc関数は、メモリを求め、それは私だ そのメモリを解放する責任 私はちょうど私達のように、それで行われている時 のメモリを解放する必要があります GET文字列で私たちに与えられた。 したがって、このプログラムの最後に、私は今 1行を追加する予定 戻る前にTを解放する 0成功を示します。 それでは、保存、コンパイルしましょう​​、と この新しいプログラムを実行します。 コピー1ドットスラッシュコピー1を作成します。 そして、私は何かのように言うよ すべて小文字でこんにちは。 そしてありがたいことに、この時間は私の 元は変更されません。 すべて小文字でこんにちは。 しかし、コピーは、確かに、大文字になります。