我正在开发一个程序,它接收Wavefront .obj file并最终将其放入OpenGL并显示该对象。
现在我只是想读一个简单的cube.obj文件并打印内容。其内容是:
v -1.0 -1.0 -2.0 v 1.0 -1.0 -2.0 v 1.0 1.0 -2.0 v -1.0 1.0 -2.0 v -1.0 -1.0 -4.0 v 1.0 -1.0 -4.0 v 1.0 1.0 -4.0 v -1.0 1.0 -4.0 f 1 2 3 f 3 4 1 f 6 5 7 f 5 8 7 f 2 6 3 f 7 3 6 f 1 4 5 f 4 8 5 f 4 7 8 f 4 3 7 f 5 6 1 f 6 2 1
我将cube.obj放在命令行args中并检查它是否打开。
FILE *fp;
fp = fopen(argv[1], "r");
if(fp == NULL)
fprintf(stderr, "cat: can't open %s\n", argv[1]);
else
printf("works");
cin.get();
它甚至没有打开。有没有更好的方法来打开.obj文件(以及最终打印它的内容?)
答案 0 :(得分:0)
这里没有提供足够的信息,但很明显问题很可能是argv[1]
的内容。 argv[1]
处的指针指向什么?不要假设,使用调试器并查看它。我敢打赌,这不是你的想法。
您也没有考虑到您的程序可能没有使用任何参数启动的事实,这意味着argv[1]
正在读取缓冲区的末尾。但这很切。
编辑:
根据您的评论,您需要将文件的完整路径提供给fopen
。如果文件在您正在运行的目录中,它应该可以工作,但取决于你的environemnt(VS是一个)可能不像听起来那么简单。
我在\ project \ debug目录中运行了一个文件foo.txt
的测试,该目录与我的可执行文件相同。它无法使用相对路径打开文件,但是以完整路径成功。
但是,如果我只是双击该目录中的可执行文件就可以了。显然VS正在幕后做一些改变工作目录的事情。
要使用相对路径,请右键单击项目 - >属性 - >调试 - >工作目录。将其设置为输出文件夹,你应该没问题。
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
int main() {
FILE *file;
if(!(file = fopen("foo.txt", "r"))) {
printf("no worky");
}
}