1

我编写了一个超级简单的 C 命令行工具,它应该从argv[1]. 我在 OS X 上使用Xcode进行调试,因此运行时的工作目录是一个 Xcode 创建的目录,与我要读取的文件分开。(Xcode 会自动插入参数,所以这不是问题。)我怀疑问题与我不了解如何fopen工作有关。当我输入路径名时,它是否相对于工作目录?如果我使用绝对路径,它会起作用吗?

我已经检查了这篇文章这篇文章和这篇文章,但在这种情况下它们似乎对我没有帮助。

这是我正在使用的代码 - 它在main函数中:

for (int i = 0; i < argc; i++)
    printf("arg%i: %s\n", i, argv[i]);

if (argc > 1)
{
    //Open the file specified by the first argument
    system("pwd");
    FILE *file = fopen(argv[1], "r");    //Always returns NULL

    if (file)
        //This isn't ever reached
    else
        printf("%s\n", strerror(errno));        
}

输出如下所示:

arg0: /Users/home/Library/Developer/Xcode/DerivedData/VSSequenceAlignment-avlfehlrtqiybygqfgueezoysnyi/Build/Products/Debug/VSSequenceAlignment
arg1: C:/Users/venkateshsivaramanDP/Documents/test/testdoc.txt
/Users/venkateshsivaramanDP/Library/Developer/Xcode/DerivedData/VSSequenceAlignment-avlfehlrtqiybygqfgueezoysnyi/Build/Products/Debug
No such file or directory

将 arg1 更改为使用正斜杠后,它并没有改变错误。诚然,它离实际问题更近了一步。

4

2 回答 2

1

你的路错了;您正在使用 Windows 路径。

将您提供的路径与 arg0 进行比较,指定可执行文件的路径。arg1必须是相同的风格。

于 2013-09-20T21:51:03.627 回答
0

是的,绝对路径适用于fopen,但这不是你的问题。我认为您的问题来自 的内容arg[1],并且我认为它包含C:\Users\home\Documents\test\testdoc.txt哪个是 Windows 路径并且您在 OS X 上。

于 2013-09-20T21:54:35.040 回答