0

C で strncpy をいじっていて、問題が発生しています。

コードは次のとおりです。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char src[] = "Benjamin Franklin";
    char dest[5];

    strncpy(src, dest, sizeof(dest) / sizeof(char));
    dest[5] = '\0';

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

    return 0;
}

以下を使用してエラーなしでコンパイルします。

gcc -Wall -g -Werror    test.c   -o test

そして意味不明のように出力します

p4��

特に私はそれをたくさんいじってオンラインで答えを探していたので、自分が間違っていることを本当に理解できません。おそらく、配列を使用しているため、気づかずにアドレスをprintfに渡していますか?

4

2 に答える 2

3

パラメータが逆です。strncpyこのように、2 番目の文字列を最初の文字列にコピーします。

strncpy(dest, src, sizeof(dest) / sizeof(char));
于 2012-11-12T04:58:02.097 に答える
2

プログラムの 2 つの間違い。

1. の引数を交換しましたstrncpy

2.はアクセスできる最後のメンバーであるため、アクセスできません。dest[5]dest[4]

以下のようにプログラムを書き直すと、動作するはずです。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char src[] = "Benjamin Franklin";
    char dest[5];

    strncpy(dest, src, sizeof(dest) / sizeof(char));
    dest[4] = '\0';

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

    return 0;
}

strncpyの代わりにstrcpy. 長さ制限のある文字列操作関数を使用することは、常に良い習慣です。

strncpy ここについて読んでください。

于 2012-11-12T05:00:20.000 に答える