不兼容的格式类型

时间:2012-11-12 04:56:28

标签: c

我在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而没有意识到它?

2 个答案:

答案 0 :(得分:3)

您的参数是倒退的。 strncpy将第二个字符串复制到第一个字符串中,就像这样。

strncpy(dest, src, sizeof(dest) / sizeof(char));

答案 1 :(得分: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 here