我正在尝试使用strncat
将两个字符串与它们之间的分隔符组合在一起,但我无法得到确切的结果。请让我知道它为什么会出错。
#include <stdio.h>
#include <string.h>
int main()
{
char Buff[100];
memset(Buff,0,sizeof(Buff));
char *Ip="192.168.4.10";
char *Ip2="192.168.4.20";
strcpy(Buff,Ip);
strncat(Buff,"||",sizeof("||"));
strncat(Buff,Ip2,sizeof(Ip2));
printf("%s",Buff);
}
我的输出为192.168.4.10||192.
,而不是两个数据的串联。可能出错了。还有更有效的方法吗?
答案 0 :(得分:2)
表达式strncat(Buff,Ip2, sizeof(Ip2));
是错误的,因为sizeof(Ip2)
给出Ip2
指针的大小,但不是Ip2
指向的字符串长度。
在你的系统中,char指针的大小是4个字节,这就是strncat()只能追加来自字符串Ip2
(1
,9
,2
的4个字符的原因, .
)。
您在sizeof()
运算符和字符串长度之间混淆。注意sizeof("||")
为您提供3
(即"||"
个字节数),而其长度为2
。
此外,第一个strncat(Buff,"||",sizeof("||"));
效果很好,因为第三个字符为\0
。
要纠正您的代码,请使用strlen(char *)
头文件中的string.h
函数:
strncat(Buff, "||", strlen("||"));
strncat(Buff, Ip2, strlen(Ip2));