Проблема с fopen() & stat()
У меня возникла проблема - моя программа не может открыть существующие файлы с помощью fopen() и просмотреть атрибуты файла с помощью stat() и возвращает errno 2: No such file or directory. В чем может быть причина проблемы? Использую Ubunut, gcc и QT Creator. С помощью gedit те же самые файлы открываются.
P.S. Пробовал перенести в другую папку и запустить оттуда - безрезультатно.
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
extern int errno;
int main(void *args)
{
char temp[50];
struct stat atr;
scanf("Enter file name:%s", temp);
FILE *fp;
fp = fopen(temp, "r");
if(fstat(fp, &atr)!=-1)
{
printf("OK\n");
}
else
{
printf("FAIL %i\n", errno);
}
return 0;
}
При использовании stat все то же самое, что и с fstat. Пробовал несколько имен существующих файлов - не работает.
P.P.S: проблема не вводе. принтф выводит все норм, пишу на С(без плюсов)
- Вы бы исходник привели... Может, просто имя не так указываете? Типа, используете \ вместо \\ :) от disputant, 21 июля 2012 года
Вставьте после строки со scanf строку типа
Кстати, учтите, что функция main имеет вид
Пример:
printf("You enter filename: \n");
scanf(temp);
Пример:
cout << "You enter filename: \n";
cin >> temp;
для их использования включи файл iostream в программу (#include <iostream>)
и пространство имен std (using namespace std;)
ну или вызывай функции так std::cin , std::cout
Пример:
printf("You enter filename: \n");
scanf(temp);
Вы таки забыли упомянутый вами же формат ввода :)
Пример:
printf("You enter filename: \n");
scanf(temp);
Вы таки забыли упомянутый вами же формат ввода :)
Формат принципиально вводить необязательно, коли просишь вот пример:
printf("Enter file name:%s\n");
scanf("%s", temp);
Пример:
printf("You enter filename: \n");
scanf(temp);
Вы таки забыли упомянутый вами же формат ввода :)
Формат принципиально вводить необязательно, коли просишь вот пример:
printf("Enter file name:%s\n");
scanf("%s", temp);
И опять хню несете... Ну и что выведет первая строка?
Вы бы хоть компилили то, что пишете...
Ведь, по вопросу судя, совсем зеленый спрашивает. Он же ваш код перепишет дословно и опять будет недоумевать, почему ни хрена не работает (или работает, но не так...)
Пример:
printf("You enter filename: \n");
scanf(temp);
Вы таки забыли упомянутый вами же формат ввода :)
Формат принципиально вводить необязательно, коли просишь вот пример:
printf("Enter file name:%s\n");
scanf("%s", temp);
И опять хню несете... Ну и что выведет первая строка?
Вы бы хоть компилили то, что пишете...
Ведь, по вопросу судя, совсем зеленый спрашивает. Он же ваш код перепишет дословно и опять будет недоумевать, почему ни хрена не работает (или работает, но не так...)
Ты прав, но вот времени маловато было пришлось почти что копипастить, чтобы сократить время на обьяснения кину ссылку на страницу документации
cplusplus. com/reference/clibrary/cstdio/printf/
в функции scanf нужно отправлять ссылку на обьект scanf("%s", &temp);
кстати для вывода строки через printf необязательно вводить спецификатор формата, но можно printf("%s", "Enter file name: \n");
в функции scanf нужно отправлять ссылку на обьект scanf("%s", &temp);
В данном случае temp объявлен как char temp[50];, так что тут &temp - ОШИБКА, тут надо просто temp - и молиться, чтоб имя файла было 1. без пробелов и 2. не длиннее 49 символов.
Или использовать другой, более разумный и безопасный подход :)