C 切片字符串和字符缓冲区不相等

C 切片字符串和字符缓冲区不相等,c,C,我想从收到的消息中提取数据包编号,并与最初发送的数据包计数进行比较,然后尝试使用以下代码 char string[] = "Hello client 0000!"; char new[4]; char bufNew[4]; int i=0; int count=0; int num=0; int packet_counter=0; for (i=13;i<17;i++) { new[count] = string[i]; count = cou

我想从收到的消息中提取数据包编号,并与最初发送的数据包计数进行比较,然后尝试使用以下代码

char string[] = "Hello client 0000!";    
char new[4];
char bufNew[4];
int i=0;
int count=0;
int num=0;
int packet_counter=0;

for (i=13;i<17;i++)
{
    new[count] = string[i];
    count = count+1;
}
new[4]='\0';
printf("Sliced no is: %s\n",new);
sprintf(bufNew, "%04d", packet_counter);
bufNew[4]='\0';

printf("packet counter is: %s\n",bufNew);

printf("String compare result: %d\n",strcmp(new,bufNew));


请指导如何使这两个字符串相等。

可能是
sprintf(bufNew,“%04d”,packet\u counter)
覆盖了
new
的终止0(因为正如其他人所说,它的使用超出了其范围)。尝试移动
printf(“切片编号为:%s\n”,新建)下方
bufNew[4]='\0'自己查看

要修复它,
new
bufNew
需要声明大小
5

   char new[5];
   char bufNew[5];

新建
bufNew
5个字符或使用
strncmp
。您的4个字符串没有空终止字节的空间。
new[4]
bufNew[4]
超出范围。是-再次计算bean:(
   char new[5];
   char bufNew[5];