0

我正在尝试将两个字符串与它们之间的分隔符组合在一起,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.不是两个数据的串联。可能出了什么问题。还有更有效的方法吗?

4

1 回答 1

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));

检查此工作代码

于 2013-10-09T15:33:33.313 回答