2017-06-30 8 views
-4

strncpy私は文字列から2文字をコピーしたいが、3文字をコピーしたいときには同じコードが動作するようにすることができない。この例ではC strncpy 2 char

は、私は変数 '' に12を格納するstrncpy()が必要:

void main(){ 
    const char* from = "12345678"; 
    char *to = (char*) malloc(3); 
    strncpy(to, from, 2); 

    printf("%s", to); 
    free(to); 
} 

が、私はmalloc(4)strncpy(to, from, 3)を使用する場合、それは大丈夫動作します。これを行うにはどんなソリューションですか?

+2

問題文が単純に「機能しない」場合は、解決策を提示することは困難です。実際の結果とどのように違うのか、そしてどのようなことが起こるのかをより完全に説明するために質問を編集してください。何が良い説明になるかについてのヒントについては、[ask]を参照してください。 –

+2

ドキュメントを読んでください:sourceがnumよりも長い場合、ヌル文字は暗黙的に最後に付加されません。 – Boiethios

+2

未来のヒント: 'strncpy'を使わないでください。ほとんどの場合、あなたが望むことをしません。 –

答えて

3

宛先文字列を終端ゼロで追加するのを忘れました。

char *to = (char*) malloc(3); 
strncpy(to, from, 2); 
to[2] = '\0'; 
+0

そのように動作します。 malloc(3)を使用して2文字必要です。\ nその配列の最後に\ nを追加する必要はありませんか? – Night5talker

+1

Cでキャストする必要はありません –