c - 比较字符串中的 N 个字节
问题描述
我想比较 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 个字符后结束。
如果您不想"pid"
maych piddddd
,请尝试比较 4 个字节,以便您点击字符串结尾标记 ( '\0'
)。
推荐阅读
- c - 正确使用 Callback 进行相同操作和不同类型
- c# - 从 WebApi MessageHandler 获取 ActionDescriptor
- python - 抓取 url、搜索和保存结果 - 没有特定地址
- python - 转换格式为 YYYYMM 的数据帧索引并将“pandas.core.indexes.base.Index”类型转换为日期时间索引
- mysql - mysql ORDER BY SUM 作为解析函数的问题
- azure - SharePoint 框架 AadHttpClient - 操作是实验功能的一部分
- macos - NSCursor 获取“移动”(4 个箭头/箭头交叉)光标
- gremlin - 在 TinkerPop 中,顶点属性可以包含复杂对象吗?
- python - 使用 gridspecs 划分子图以具有 6 个相同大小的按钮
- python - 代码执行后 Jupyter Kernel 很忙