在xcode 6中用c编程打开一个文件

时间:2015-01-07 01:55:51

标签: c xcode file

#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

  

我不知道哪一步是错的。

4 个答案:

答案 0 :(得分:2)

您没有提供足够的命令行参数。要在xcode中提供输入文件,您可以转到产品菜单 - &gt;方案 - &gt;编辑方案选项....此时您可以传递您希望用作输入的文件的路径

您的程序正常运行。您没有提供命令行参数,它告诉您

在xcode中添加参数的屏幕看起来就像我在下面显示的那样。你进入这个屏幕,使用上面描述的菜单选项,单击加号按钮,然后添加输入文件的路径

enter image description here

答案 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;参数 在“启动时传递的参数”中单击加号,然后添加绝对文件名,即要打开的文件的路径。

***如果您的文件夹名称在绝对路径中有空格,则此操作无效!因此,打开终端,将文件拖放到终端窗口,然后复制绝对路径(当然,从终端窗口)并将其粘贴到“启动时传递的参数”部分(如上所述)。