2011-05-27 48 views
2

我想将参数传递给xCode中的命令行。我查了这个问题,发现我需要将工作目录设置为文件所在的路径。另外,我必须将参数添加到project- edit activeexecutable下的参数选项卡。我也做了这个。C Xcode问题

我添加了michael.txt两次。

/* This file is saved as readtext.c, compiled as readtext */ 
#include <stdio.h> 
void main(int argc, char *argv[]) 
{ 
    FILE *fin; 
    char buffer[100]; 
    printf("Michael Mazur\n"); 
    if (argc != 2) {printf("Usage: %s filename\n", argv[0]); exit(1);} 
    fin = fopen(argv[1], "r"); 
    if (!fin) {printf("Unable to open %s\n", argv[1]); exit(1);} 
    while (fgets(buffer, 99, fin)) fputs(buffer, stdout); 
    fclose (fin); 
} 

我一直在想,没有2个参数被传递的情况。我还运行了一个小测试程序,它不断返回,我只有1个参数被传递,无论我添加了多少。任何帮助?

+0

如果您在xcode之外手动运行程序并提供参数,它是否按预期工作? – akent 2011-05-27 04:27:24

+0

是的。如果我在xcode之外运行它,它按预期运行。 – Michael 2011-05-27 17:01:33

回答

4

argv[0](可执行文件的路径)对在argc,因此,如果您添加michael.txt两次,argc将3稍长介绍here。 (一般情况下,当事情是行为不端这样,无论是使用调试器来检查所有值的变量或打印出来。)

确保两个参数进行检查,并在单独的行,像这样:

picture of xcode

此外,在未来请注明你是什么版本的Xcode的使用;我认为从你的描述来看,它是3.x,所以我就是这样回答这个问题的。版本之间的用户界面差别很大。

+0

对不起,我正在使用Xcode 3.2。如图所示,我在单独的行上检查了参数。我仍然得到了答案,无论我通过使用这段代码来测试多少次,我都会传递1个参数: – Michael 2011-05-27 16:59:36

+0

#include void showargs(int,char **); 的#define STAND_ALONE 1 的#ifdef STAND_ALONE INT主(INT的argc,字符* argv的[]){ \t的printf( “迈克尔马祖尔tessst \ n”); showargs(argc,argv); \t return(0); } #ENDIF 空隙showargs(INT的argc,字符* argv的[]){ \t INT I; printf(“程序名称:%s \ n”,argv [0]); \t printf(“有%d个参数\ n”,argc); (i = 1; i Michael 2011-05-27 17:04:37

+0

你可以发布你的项目的某处(只需将目录压缩并发布)?你可能会遇到一个模糊的Xcode错误... – 2011-05-27 21:50:47