文字列コンストラクトは、次のようにしてデータ用のスペースを取得しました
new char[strlen(cp)+1];
文字列には文字しかないのでstrlen(cp)
、余分なバイトは何のためにあるのでしょうか?
文字列コンストラクトは、次のようにしてデータ用のスペースを取得しました
new char[strlen(cp)+1];
文字列には文字しかないのでstrlen(cp)
、余分なバイトは何のためにあるのでしょうか?
( C スタイルの文字列はnull で終わる配列であることを思い出してください)。
その他の役立つメモ:
strlen
はカウントされません(そのため、この余分なバイト'\0'
が必要です)。strcpy
をコピーします'\0'
。char str[7] = "String";
- 自動的に追加'\0'
されます。char str[] = {'S','t','r','i','n','g'}
-追加しません'\0'
。char str[7] = {'S','t','r','i','n','g'}
-追加し'\0'
ます。C ベースの文字列では、文字列の末尾に常に特殊文字があり、'\0'
これにも追加のバイトが必要です。これが、追加の文字が必要な理由であり、strlen(str)+1
文字列を格納するための配列が必要です。