首页 > 解决方案 > 如何比较 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]。

标签: c

解决方案


您没有正确打开文件:

in = fopen(argv[1], "rw");

rw不是有效模式。如果您想打开阅读和写作,请r+改用。另外,不要忘记检查是否fopen失败。

in = fopen(argv[1], "r+");
if (!in) {
    perror("fopen failed");
    exit(1);
 }

推荐阅读