c - 如何比较 argv 和另一个字符串?
问题描述
就像我的代码没有比较两者一样。我不明白为什么。这是第一个给我带来麻烦的 if 条件。我该怎么做才能解决问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
FILE *in;
in = fopen(argv[1], "rw");
char s1[30], s2[30], s3[30];
if(strcmp(argv[2], "new") == 0){
while(fscanf(in, "%s %s %s", s1,s2,s3) == 3){
if(strcmp(s1, argv[3]) == 0 && strcmp(s2,argv[4])==0 && strcmp(s3, argv[5])==0){
printf("Errore! Cartolina già esistente.\n");
exit(0);
}
}
fprintf(in, "%s %s %s\n", argv[3], argv[4], argv[5]);
}
if(strcmp(argv[2], "find") == 0){
while(fgets(s1, 30, in) != NULL){
if(strstr(s1, argv[3]) != NULL){
printf("%s", s1);
}
}
}
return 0;
}
编辑:我刚刚意识到我使用了“r”而不是“rw”,但它仍然没有在文件中打印 argv[3]、argv[4] 和 argv[5]。
解决方案
您没有正确打开文件:
in = fopen(argv[1], "rw");
rw
不是有效模式。如果您想打开阅读和写作,请r+
改用。另外,不要忘记检查是否fopen
失败。
in = fopen(argv[1], "r+");
if (!in) {
perror("fopen failed");
exit(1);
}
推荐阅读
- android-management-api - 使用 setupActions 关键字在 Android Management API 注册期间未启动自定义 Android 应用
- javascript - 查找 hh:mm:ss 的时间平均值
- php - 我为 FreeBSD 使用哪些 PDO SQL Server 驱动程序?
- ocaml - 用 Yojson 检测 JSON 对象是否有键
- symfony - 如何在配置中使用数组`env`解析器?
- teamcity - 如何在团队城市构建代理中使用 openJDK 而不是 Oracle JDK?
- java - 不兼容的操作数类型 int 和 int[]
- android - kotlin.TypeCastException:null 不能转换为非 null 类型
- react-dates - React-dates SDP - 今天如何禁用?
- java - 使用 mockito 测试 Hibernate DAO 方法