【问题标题】:Properly use main function arguments in C, NetBeans 7.2在 C、NetBeans 7.2 中正确使用主函数参数
【发布时间】:2014-03-05 12:11:17
【问题描述】:

我在尝试将目录路径传递给我在 NetBeans 7.2 上的程序时遇到了困难,我试图做的是在项目参数上写 "${OUTPUT_PATH}" "/home/vitor/Área de Trabalho/Programação/Teste"/home/vitor/Área de Trabalho/Programação/Teste 是我的目录路径,里面有 3 个 .txt 文件,我的程序应该通过在路径结尾添加它们的名称来读取每个文件,例如:

/home/vitor/Área de Trabalho/Programação/Teste/times.txt

这是我的一段代码:

int main(int argc, char *argv[]){
if(argc == 1){
    printf("ERROR: The directory's path wasn't informed.");
    exit(1);
}
else{
    char endtimes[200];
    strcpy(endtimes, argv[1]);
    strcat(endtimes, "times.txt");
    }    
FILE *caminho;
caminho = fopen(endtimes, "r");
if (!caminho){
    printf("Error trying to open file.");
    exit(1);
}

每次我尝试运行代码时,它都会显示Error trying to open file.我检查了argc,它的值是4(我猜这是不对的。)我没有足够的使用netbeans的经验,事实上,这是我的第一个处理文件的程序。那么,你们能帮帮我吗?

我使用的是 Ubuntu 13。

感谢您的耐心等待。

--编辑--

我根据下面的 cmets 对项目的参数进行了更改,endtimes 正在存储正确的文件路径:/home/vitor/Área de Trabalho/Programação/Teste/times.txt 但我仍然得到Error trying to open file. 文件路径是否应该不同,因为我使用的是 Ubuntu 13?

【问题讨论】:

  • argv[] 从 0 开始索引,从 process 参数开始,然后是 1 处的第一个命令行参数。那些2在里面做什么?有效范围是0...(argc-1) 您使用的路径是否已经存在? fopen 不会为你创建它。
  • strcpy(endjogos, argv[2]);这一行之后,添加:printf(argv[2]);。您的路径名已嵌入空格,您很可能需要将路径用单引号或双引号引起来。 print 语句会让你知道实际使用的是什么路径。
  • 您通过该编辑从根本上改变了它。你的真实代码是哪个?
  • 我同意大卫 (+1)。如果您有带有嵌入空格的长文件名,则需要在以 arg 形式出现时对名称进行双引号。
  • 该程序只是应该在目录路径的末尾添加文件名times.txtjogos.txtapostas.txt,因此,例如,endjogos 将类似于 @ 987654339@

标签: c file netbeans-7 main ubuntu-13.10


【解决方案1】:

如果你有一个像“main.out -one.txt -two.txt tree.txt”这样的程序调用,你有4个参数。因此argc 将是 4 argv[0] 将是“main.out” argv[1] 将是“one.txt” argv[2] 将是“two.txt” argv[3] 将是“tree.txt”

【讨论】:

    【解决方案2】:

    argv[0] 是可执行文件的名称,如果您以文件名的形式传递了 3 个参数,这些参数将分别存储在 argv[1]argv[2]argv[3] 中。所以你可能想要这样的东西:

    strcpy(endjogos, argv[1]);
    strcat(endjogos, "jogos.txt");
    strcpy(endtimes, argv[2]);
    strcat(endtimes, "times.txt");
    strcpy(endapost, argv[3]);
    strcat(endapost, "apostas.txt");
    

    请注意,C 数组是零索引的,因此使用 argc==4,您有 argv[0]argv[1]argv[2]argv[3]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 2016-08-27
      • 1970-01-01
      • 2020-01-20
      相关资源
      最近更新 更多