我试图在Mac OS X中用C ++打开一个文本文件,但我总是收到一个总线错误。
我不在乎把文件放在哪里。我只需要阅读它。我写的地址错了吗?或者总线错误还有其他原因吗?
FILE *dic;
dic = fopen("DICT","rb");
dic = fopen("./DICT","rb");
dic = fopen("~/DICT","rb");
dic = fopen("~//DICT","rb");
答案 0 :(得分:3)
稍微澄清一点,我看到你的C代码(不是C ++!)中的问题是fopen()
返回NULL
。您可以通过报告详细错误来检查问题的真正原因:
if( (dic = fopen("DICT", "rb") == NULL ) {
fprintf(stderr, "%s\n", perror("ERROR:"));
exit(1);
}
如果fopen()
无法在用户桌面上找到该文件,并且您希望您的代码在多个平台上运行,那么您可以定义一个函数来获取用户的桌面目录以便与fopen()
一起使用。像
char* user_desktop(char* buf, size_t len)
{
const char* const DESKTOP_DIR =
#ifdef PC
"C:\\Documents and Settings\\Pooya\\Desktop\\"
#elif defined(OSX)
"/Users/Pooya/Desktop/"
#elif defined(LINUX)
"/home/users/pooya/Desktop/"
// fail to compile if no OS specified ...
#endif
return strncpy(buf, DESKTOP_DIR, len);
}
您可能希望研究一种更健壮的方法来获取每个操作系统的桌面路径。大多数操作系统都有此API,您的研究也是如此。对于各种平台,还有更强大的分割行为方式,您可以查看或打开一个不同的问题。我只是想表达我的想法,即无论在哪个平台上编译代码,都有一个能够返回适当桌面路径的函数。
答案 1 :(得分:0)
这段代码是对的!注意可执行文件所在的目录。确保执行目录与您期望的不一样(我想,.c
文件的目录,对吧?)。
我相信您正在从IDE执行该应用程序。这在Xcode中是普通的,它将exec安装在另一个位置而不是项目文件所在的位置,并且这个位置在执行程序时被考虑,无论你是否从IDE执行它!
只需将您要阅读的文件移动到应用程序的位置即可正常运行。