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将第二个字符串复制到第一个字符串中,就像这样。

strncpy(dest, src, sizeof(dest) / sizeof(char));
于 2012-11-12T04:58:02.097 回答
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 回答