在 xcode 6 中用 c 编程打开文件
Opening a file in c programming in xcode 6
#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;
}
运行该程序的结果是:
Usage: /Users/huangweijun/Library/Developer/Xcode/DerivedData/input-hhjvfzwnywskidbyoxavtgvmoffb/Build/Products/Debug/input filename
不知道哪一步错了
您没有提供足够的命令行参数。要在 xcode 中提供输入文件,您可以转到 产品菜单 -> 方案 -> 编辑方案 选项....此时您可以传入路径到您希望用作输入的文件
您的程序运行正常。您没有提供命令行参数,它告诉您如此
在 xcode 中添加参数的屏幕如下所示。您进入此屏幕,使用上述菜单选项,单击加号按钮,然后将路径添加到输入文件
没什么问题。阅读代码,尤其是这部分:
if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
如果命令行参数个数不等于2,打印出一些使用信息然后退出。所以你需要用一个命令行参数调用程序。
请注意,虽然它与值 2 进行比较,但程序只需要一个参数,因为程序名称本身算作第一个参数,即 argv[0]
.
问题是您需要在调用时将 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] = '[=11=]';
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;
}
产品 -> 编辑方案... -> 运行 -> 参数
在"Arguments Passed On Launch"点击加号,然后添加一个绝对文件名,即你要打开的文件的路径。
***如果您的文件夹名称在您的绝对路径中有空格,这将不起作用!。因此打开终端,将文件拖放到终端 window 中,然后复制绝对路径(当然是从终端 window 复制)并将其粘贴到 "Arguments Passed On Launch" 部分(如上所述) .
#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;
}
运行该程序的结果是:
Usage: /Users/huangweijun/Library/Developer/Xcode/DerivedData/input-hhjvfzwnywskidbyoxavtgvmoffb/Build/Products/Debug/input filename
不知道哪一步错了
您没有提供足够的命令行参数。要在 xcode 中提供输入文件,您可以转到 产品菜单 -> 方案 -> 编辑方案 选项....此时您可以传入路径到您希望用作输入的文件
您的程序运行正常。您没有提供命令行参数,它告诉您如此
在 xcode 中添加参数的屏幕如下所示。您进入此屏幕,使用上述菜单选项,单击加号按钮,然后将路径添加到输入文件
没什么问题。阅读代码,尤其是这部分:
if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
如果命令行参数个数不等于2,打印出一些使用信息然后退出。所以你需要用一个命令行参数调用程序。
请注意,虽然它与值 2 进行比较,但程序只需要一个参数,因为程序名称本身算作第一个参数,即 argv[0]
.
问题是您需要在调用时将 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] = '[=11=]';
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;
}
产品 -> 编辑方案... -> 运行 -> 参数 在"Arguments Passed On Launch"点击加号,然后添加一个绝对文件名,即你要打开的文件的路径。
***如果您的文件夹名称在您的绝对路径中有空格,这将不起作用!。因此打开终端,将文件拖放到终端 window 中,然后复制绝对路径(当然是从终端 window 复制)并将其粘贴到 "Arguments Passed On Launch" 部分(如上所述) .