2

1つの単語の最初の2文字だけを取り、2番目の単語の最後の3文字を受け取る単純なcプログラムを作成しました。strncpyを使用して、name1の最初の2文字のみをnameにコピーし、name2の最後の3文字と連結します。

しかし、私がそれを実行すると。出力はどういうわけか好きになります

Ediacy //correct

acy  //wrong

Ed?
acy  //wrong

Edk
   acy //wrong

Edv
   acy //wrong

// code sample
#include <stdio.h>
#include <string.h>

int main(void)
{
    char name[100];

    char name1[] = "Edison";
    char *name2 = "Tracy";

    strncpy(name, name1, 2); // instead of get Ed, it tried to append one extra char behind it.
    strcat(name, name2+2);

    printf("%s\n", name);

    return 0; 
}

なぜそれがこのように動作するのか、そしてどのように修正できるのかを誰かが理解するのを手伝ってくれたら本当にありがたいです。

4

1 に答える 1

5

strncpyサイズが小さすぎる場合、nul-terminatorを追加しません。

これを試して:

strncpy(name, name1, 2);
name[2] = '\0';
于 2013-03-17T06:58:16.370 に答える