user-0 提问: grep函数中参数的顺序

回复:
user: user-1
content: 用8楼代码。

user: user-2
content: 引用 7 楼 zcmerlin 的回复:[quote=引用 6 楼 wangcg123 的回复:] 你就把代码里使用参数的地方的索引换一下就好了啊 就是argv[2] 和argv[1] 颠倒一下 并不行= =[/quote] 不可能，这么简单一个问题，你逐句调试下，看看argv[1]和argv[2]是什么值，你就明白了

user: user-1
content: http://bbs.csdn.net/topics/390469280

user: user-3
content: argv[0] 是执行命令， argv[1] ,argv[2].....分别是你执行命令后跟的内容 如果你按这样执行：命令名称 被查找文件 字符串 结果文件          那么argv[1]就是被查找文件，argv[2]是字符串，argv[3]是结果文件； 如果你想按这样执行：命令 字符串 被查找文件  结果文件             那么这时argv[1]的内容就是字符串，argv[2]的内容就是被查找文件，argv[3]就是结果文件（也就是你需要在代码中把相应的argv[1]和argv[2] 换下就行） 注：简单来说就是命令后的第一个内容就是 argv[1],第二个就是argv[2].....以此类推

user: user-4
content: argv[]数组是你输入的字符串的地址。 比如，你执行时是这样的：./app src.txt  hello dst.txt argv[0]是可执行文件名即./app, argv[1]是源文件，即src.txt argv[2]是要查找的字符串，即hello argv[3]是要拷贝至的文件，即dst.txt; 要想知道每个argv[]是什么，可以通过输出来，以便方便查看。比如以下代码：  #include <stdio.h>  int main(int argc, const char *argv[]) {     int i;      for (i = 0; i < argc; i++)         printf("argv[%d] = %s\n", i, argv[i]);      return 0; }

user: user-1
content: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <locale.h> int main(int argc,char**argv) {     FILE *fsource, *foutcome;     char buf[1024];     int n;      setlocale(LC_ALL,"chs");     if (argc<4) {         printf("缺少参数\n    参考格式: \"%s\" \"要查找的字符串\" \"被查找文件\" \"结果文件\"\n",argv[0]);         return -1;     }     if ((fsource = fopen(argv[2], "r")) == NULL) {         printf("打开被查找文件 %s 错误原因:%s!\n", argv[2], strerror(errno));         return -1;     }     if ((foutcome = fopen(argv[3], "a+")) == NULL) {         printf("打开结果文件 %s 错误原因:%s!\n", argv[3], strerror(errno));         return -1;     }     n = 0;     while (1) {         if (NULL==fgets(buf, sizeof(buf), fsource)) break;         n++;         if (NULL!=strstr(buf, argv[1])) {              printf(          "Line %5d: %s", n, buf);             fprintf(foutcome, "Line %5d: %s", n, buf);             break;         }     }     fclose(foutcome);     fclose(fsource);     return 0; }

user: user-0
content: 引用 6 楼 wangcg123 的回复:你就把代码里使用参数的地方的索引换一下就好了啊 就是argv[2] 和argv[1] 颠倒一下 并不行= =

user: user-2
content: 你就把代码里使用参数的地方的索引换一下就好了啊 就是argv[2] 和argv[1] 颠倒一下

user: user-0
content: 引用 3 楼 jianwen0529 的回复:[quote=引用 2 楼 jianwen0529 的回复:]  if((foutcome = fopen(argv[3], "a+")) == NULL) //第三个参数是一个文件路径，追加方式读写         {             printf("打开文件 %s 错误原因:%s!\n", argv[3], strerror(errno));             return -1;         }         if((fsource = fopen(argv[1], "r")) == NULL) //第一个参数是一个文件路径，只读方式。         {             printf("打开文件 %s 错误原因:%s!\n", argv[1], strerror(errno));             return -1;         }     }           /*循环读取文件,直至结尾*/     while(!feof(fsource))     {         fgets(buf, sizeof(buf), fsource);         n++;         pstr = buf;           /*对每行文本进行检索,查找指定字符串*/         while(*pstr != NULL)         {             if(strncmp(pstr, argv[2], sizeof(argv[2])) == 0) //参数2 跟 读取文件的某一行进行比较  参数2说错了，并不是行。[/quote]  代码理解没太大问题  我想问的是执行时，参数的顺序为什么是 ：命令 文件 字符串 文件  如果我想用：命令 字符串 文件 文件   这样的顺序行不行，应该怎么改

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/390469280 谢谢老师 我还是有点不明白，您帖子里用的就是dos本身的命令，它有固定的顺序 但我的是找代码编译出来的程序，其中参数的顺序难道不应该在代码里有体现吗

user: user-5
content: 引用 2 楼 jianwen0529 的回复:if((foutcome = fopen(argv[3], "a+")) == NULL) //第三个参数是一个文件路径，追加方式读写         {             printf("打开文件 %s 错误原因:%s!\n", argv[3], strerror(errno));             return -1;         }         if((fsource = fopen(argv[1], "r")) == NULL) //第一个参数是一个文件路径，只读方式。         {             printf("打开文件 %s 错误原因:%s!\n", argv[1], strerror(errno));             return -1;         }     }           /*循环读取文件,直至结尾*/     while(!feof(fsource))     {         fgets(buf, sizeof(buf), fsource);         n++;         pstr = buf;           /*对每行文本进行检索,查找指定字符串*/         while(*pstr != NULL)         {             if(strncmp(pstr, argv[2], sizeof(argv[2])) == 0) //参数2 跟 读取文件的某一行进行比较  参数2说错了，并不是行。

user: user-5
content: if((foutcome = fopen(argv[3], "a+")) == NULL) //第三个参数是一个文件路径，追加方式读写         {             printf("打开文件 %s 错误原因:%s!\n", argv[3], strerror(errno));             return -1;         }         if((fsource = fopen(argv[1], "r")) == NULL) //第一个参数是一个文件路径，只读方式。         {             printf("打开文件 %s 错误原因:%s!\n", argv[1], strerror(errno));             return -1;         }     }           /*循环读取文件,直至结尾*/     while(!feof(fsource))     {         fgets(buf, sizeof(buf), fsource);         n++;         pstr = buf;           /*对每行文本进行检索,查找指定字符串*/         while(*pstr != NULL)         {             if(strncmp(pstr, argv[2], sizeof(argv[2])) == 0) //参数2 跟 读取文件的某一行进行比较