С небольшим уточнением я вижу проблему в вашем коде 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 для этого, так что сделайте свое исследование. Есть также более надежные способы разделения поведения для различных платформ, вы можете посмотреть на это или открыть другой вопрос по этому поводу. Я просто хотел выразить свою идею иметь функцию, которая будет возвращать вам соответствующий путь к рабочему столу независимо от того, на какой платформе вы компилируете свой код.