【发布时间】:2014-11-03 19:28:50
【问题描述】:
在 Xcode 上运行下面编写的代码时,我得到了奇怪的输出。该程序只是从给定命令行参数的文件中读取整数,并输出这些整数的数组。
这就是我得到的结果:
"0 程序以退出代码结束:0"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
FILE* file;
file = fopen(argv[1], "r");
if (!file) {
printf("error occured!! make sure right file is provided");
}
else{
int i = 0;
// int value;
int array[atoi(argv[2])];
while (!feof(file)) {
fscanf(file, "%d", &array[i]);
printf("%d ", array[i]);
i++;
}
}
return 0;
}
但是,如果我从终端运行相同的代码,它会输出预期结果:
我猜问题可能是我在 Xcode 中提供的参数,但我无法弄清楚究竟是什么。
更新: 我的 input.txt 文件包含以下内容: “1 2 3 4 5”
更新: 已解决 似乎在上次更新后 Xcode 中存在错误。当文件名添加到参数部分时..它不会在调试文件夹中创建它们。我在以下文件夹中手动创建了文件“input.txt”:/Users/name/Library/Developer/Xcode/DerivedData/percentile-ecpffkfxacqgpggopnguhvlicvtt/Build/Products/Debug(可以通过从可执行文件中选择“在 Finder 中显示”来访问它Xcode Project Navigator 中“产品”组中的名称) 并且成功了。
【问题讨论】:
-
您使用的所有
argv条目可能都无效,具体取决于argc。fscanf返回一个值,告诉您扫描是否成功;用它。该文件可能包含比数组大小更多的数字,这将导致缓冲区溢出。 -
printf("%d ", array[i]);的使用不正确。fscanf()的返回值被忽略,并且在 EOF 上,这可能是第一次通过循环,array[i]有一个未定义的值。 -
不,这不是错误。 IDE 不应该仅仅因为您在测试运行的参数设置中提到它就创建文件。
-
我同意 IDE 不应该创建文件,但是如果参数列表中提到它应该能够访问文件。据我所知,这就是其他 IDE 的所有行为。除此之外,Xcode 在更新前也是如此。
标签: c xcode file-io readfile scanf