#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int ch; //place to store each character as read
FILE *fp;
unsigned long count = 0;
if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
if ((fp = fopen(argv[1], "r")) == NULL)
{
printf("Can't open %s\n", argv[1]);
exit(EXIT_FAILURE);
}
while ((ch = getc(fp)) != EOF)
{
putc(ch,stdout); // same as putchar(ch);
count++;
}
fclose(fp);
printf("File %s has %lu characters\n", argv[1], count);
return 0;
}
运行此程序的结果是:
用法:/ Users / huangweijun / Library / Developer / Xcode / DerivedData / input-hhjvfzwnywskidbyoxavtgvmoffb / Build / Products / Debug / input filename
我不知道哪一步是错的。
答案 0 :(得分:2)
您没有提供足够的命令行参数。要在xcode中提供输入文件,您可以转到产品菜单 - &gt;方案 - &gt;编辑方案选项....此时您可以传递您希望用作输入的文件的路径
您的程序正常运行。您没有提供命令行参数,它告诉您
在xcode中添加参数的屏幕看起来就像我在下面显示的那样。你进入这个屏幕,使用上面描述的菜单选项,单击加号按钮,然后添加输入文件的路径
答案 1 :(得分:2)
问题是你需要在调用时将exaclty 1参数传递给你的程序,要在XCode中实现,你需要去菜单
Product -> Edit Scheme... -> Run -> Arguments
然后您会看到Arguments Passed On Launch
点击plus
符号,然后添加文件名,即您要打开的文件的路径。
或者您可以向用户询问此类文件名
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int ch; //place to store each character as read
FILE *fp;
unsigned long count = 0;
const char *filename;
char buffer[128];
filename = NULL;
if (argc != 2)
{
size_t length;
printf("Enter the file name > ");
if (fgets(buffer, sizeof(buffer), stdin) == NULL)
return -1; // error or end of file sent to the terminal
length = strlen(buffer);
if (buffer[length - 1] == '\n') // remove the traling '\n' add by fgets
buffer[length - 1] = '\0';
filename = buffer;
}
else
filename = argv[1];
if ((fp = fopen(filename, "r")) == NULL)
{
printf("Can't open %s\n", filename);
exit(EXIT_FAILURE);
}
while ((ch = getc(fp)) != EOF)
{
putc(ch,stdout); // same as putchar(ch);
count++;
}
fclose(fp);
printf("File %s has %lu characters\n", filename, count);
return 0;
}
答案 2 :(得分:1)
没有错。阅读代码,特别是这部分:
if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
如果命令行参数的数量不等于2,则打印出一些使用信息,然后退出。因此,您需要使用单个命令行参数调用该程序。
请注意,虽然它与值2进行比较,但程序只需要1个参数,因为程序名称本身就算作第一个参数,即argv[0]
。
答案 3 :(得分:-1)
产品 - &gt;编辑方案... - &gt;运行 - &gt;参数 在“启动时传递的参数”中单击加号,然后添加绝对文件名,即要打开的文件的路径。
***如果您的文件夹名称在绝对路径中有空格,则此操作无效!因此,打开终端,将文件拖放到终端窗口,然后复制绝对路径(当然,从终端窗口)并将其粘贴到“启动时传递的参数”部分(如上所述)。