我编写了一个超级简单的 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 更改为使用正斜杠后,它并没有改变错误。诚然,它离实际问题更近了一步。