比较字符串中的N个字节

问题描述 投票:0回答:3

我想比较argv [1]和字符串“pid”,但我想限制要比较多少字节。我使用了strncmp,但是有问题,如果我加上第三个参数3它比较超过3个字节。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
    if (argc < 2)
        exit(EXIT_FAILURE);
    size_t i = 3;
    if (strncmp(argv[1], "pid", i) == 0){
        printf("%ld\n", (long)getpid());
    }

}

在终端

   $./main pid
   343
   $ ./main pidd
   354
   $ ./main piddd
   352
c string-comparison strncmp
3个回答
3
投票

strncmp()比较了所有三个调用中的三个字节。但因为它只比较3个字节,你无法判断argv[0]字符串是否在3个字符后结束。

如果你想要qazxsw poi不匹配qazxsw poi,请尝试比较4个字节,以便你点击字符串结束标记("pid")。


2
投票

这可能有效:

piddddd

1
投票

您可以在下面进行如下检查:

'\0'

但是对于您尝试的所有三种可能输入,前3个字节都是“付费”。所以strncmp显然会返回0并且只是预期的。

© www.soinside.com 2019 - 2024. All rights reserved.