2012-11-12 27 views
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而没有意识到它?

回答

3

您的参数向后。 strncpy将第二个字符串复制到第一个字符串中,如此。

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

+1我正要给出相同的答案2秒晚:) –

+0

什么是失败的我。多谢你们!!! – nebffa

2

您程序中的两个错误。

1.您交换了strncpy的参数。

2.Also you 无法访问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。使用具有长度限制的字符串操作函数总是一个很好的习惯。

阅读关于strncpyhere