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