我想比较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
strncmp()
比较了所有三个调用中的三个字节。但因为它只比较3个字节,你无法判断argv[0]
字符串是否在3个字符后结束。
如果你想要qazxsw poi不匹配qazxsw poi,请尝试比较4个字节,以便你点击字符串结束标记("pid"
)。
这可能有效:
piddddd
您可以在下面进行如下检查:
'\0'
但是对于您尝试的所有三种可能输入,前3个字节都是“付费”。所以strncmp显然会返回0并且只是预期的。