2013-02-16 158 views
0

我正在编写一个应该能够执行命令行参数的程序。 基本上,用户必须能够在调用程序时通过命令提示符指定文件名。即程序应该能够接受如下参数: doCalculation -myOutputfile.txt。其中doCalculation是我的程序的名称,myOutputfile是我希望将结果写入到的文件(即将我的计算结果输出到指定的文件名)。使用命令行输出到文件

到目前为止,我可以通过命令提示符调用我的函数。我不确定如何让我的程序写入指定的文件名(或者如果它不存在,则创建该文件)。

我的代码如下:

int main(int argc, char *argv[]) 
{ 
    FILE* outputFile; 
    char filename; 

    // this is to make sure the code works 
    int i = 0; 
    for (i = 0; i < argc; i++) { 
     printf("argv[%d] = %s\n", i, argv[i]); 
    } 

    //open the specified file 
    filename= argv[i]; 
    outputFile = fopen("filename", "r"); 

    //write to file 
    fclose(outputFile); 
} 
+1

你甚至试过阅读C库的文档吗?阅读fopen函数的模式参数说明。 – dbenham 2013-02-16 20:42:32

+1

一个简单的Google搜索“c写入一个文件示例”产生的绰绰有余的例子。 – dbenham 2013-02-16 20:45:32

+0

正如博C.建议,您需要添加一行,如'fprintf(outputFile,“blah blah”);'实际写入您打开的文件。 – 2013-02-16 22:13:18

回答

0

所以,有两件事情,我注意到...

  1. 如果要写入文件,使用“W”为写模式,而不是当打开文件时,读取模式为“r”。
  2. 您将文件名声明为单个字符而不是指向字符串(char *)的指针。使它成为指针将允许长度大于1的文件名(字符数组而不是单个字符)。
  3. 正如Ashwin Mukhija所提到的那样,当for循环将其设置为2时,您将使用i,但实际上您需要第二个(索引1)参数。
  4. 您将open()函数中的文件名参数作为文件名“filename”而不是文件名变量。

看看这段代码是否有助于解决您的问题,(我也扔了一个fprintf()在那里向您展示如何写入文件)。 干杯!

int main(int argc, char *argv[]) 
{ 
    FILE* outputFile; 
    char* filename; 

    // this is to make sure the code works 
    int i = 0; 
    for (i = 0; i < argc; i++) { 
     printf("argv[%d] = %s\n", i, argv[i]); 
    } 

    //saftey check 
    if(argv[1]) 
    { 
     filename = argv[1]; 

     //open the specified file 
     outputFile = fopen(filename, "w"); 

     fprintf(outputFile, "blah blah"); 

     //write to file 
     fclose(outputFile); 
    } 

    return 0; 
}