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

时间:2019-09-11 19:07:17

标签: c

我想从接收到的消息中提取数据包编号,并想与原始发送的packet_count比较并尝试以下代码

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

尽管输出看起来相同,但字符串却不同。

输出:

Sliced no is: 0000                                                                                                            
packet counter is: 0000                                                                                                       
String compare result: 48

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

1 个答案:

答案 0 :(得分:2)

sprintf(bufNew, "%04d", packet_counter);很有可能会覆盖new的终止0(因为正如其他人所说的那样,它已超出范围使用)。尝试将printf("Sliced no is: %s\n",new);下移到bufNew[4]='\0';下方,以便亲自查看。

要解决此问题,需要newbufNew声明为5

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