Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с fopen() & stat()

47K
21 июля 2012 года
BOTOKILLER
38 / / 16.11.2010
Доброго времени суток!
У меня возникла проблема - моя программа не может открыть существующие файлы с помощью fopen() и просмотреть атрибуты файла с помощью stat() и возвращает errno 2: No such file or directory. В чем может быть причина проблемы? Использую Ubunut, gcc и QT Creator. С помощью gedit те же самые файлы открываются.
P.S. Пробовал перенести в другую папку и запустить оттуда - безрезультатно.



Код:
#include <sys/stat.h>
#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 года
47K
23 июля 2012 года
BOTOKILLER
38 / / 16.11.2010
Спасибо всем, разобрался сам.
2.1K
21 июля 2012 года
disputant
95 / / 28.05.2007
Начнем с малого.

Вставьте после строки со scanf строку типа

 
Код:
pfintf("You enter filename: %s\n",temp);
и посмотрите, что реально за имя файла получается... После чего обратитесь к учебнику, справочной системе etc - как работает функция scanf...

Кстати, учтите, что функция main имеет вид

 
Код:
int main(int, char**);
хотя в данном случае это ни при чем...
79K
21 июля 2012 года
MaximusFk
12 / / 07.07.2012
Загвоздка в том, что функция scanf должна принимать именно формат ввода, а не строку, вывести эту строку лучше через printf
Пример:
printf("You enter filename: \n");
scanf(temp);
79K
21 июля 2012 года
MaximusFk
12 / / 07.07.2012
Кстати раз вы пишите программу на C++ то советую посмотреть в сторону стандартных потоков cin и cout для терминала
Пример:
cout << "You enter filename: \n";
cin >> temp;

для их использования включи файл iostream в программу (#include <iostream>)
и пространство имен std (using namespace std;)
ну или вызывай функции так std::cin , std::cout
2.1K
21 июля 2012 года
disputant
95 / / 28.05.2007
Цитата: MaximusFk
Загвоздка в том, что функция scanf должна принимать именно формат ввода, а не строку, вывести эту строку лучше через printf
Пример:
printf("You enter filename: \n");
scanf(temp);



Вы таки забыли упомянутый вами же формат ввода :)

79K
22 июля 2012 года
MaximusFk
12 / / 07.07.2012
Цитата: disputant
Цитата: MaximusFk
Загвоздка в том, что функция scanf должна принимать именно формат ввода, а не строку, вывести эту строку лучше через printf
Пример:
printf("You enter filename: \n");
scanf(temp);



Вы таки забыли упомянутый вами же формат ввода :)


Формат принципиально вводить необязательно, коли просишь вот пример:
printf("Enter file name:%s\n");
scanf("%s", temp);

2.1K
22 июля 2012 года
disputant
95 / / 28.05.2007
Цитата: MaximusFk
Цитата: disputant
Цитата: MaximusFk
Загвоздка в том, что функция scanf должна принимать именно формат ввода, а не строку, вывести эту строку лучше через printf
Пример:
printf("You enter filename: \n");
scanf(temp);



Вы таки забыли упомянутый вами же формат ввода :)


Формат принципиально вводить необязательно, коли просишь вот пример:
printf("Enter file name:%s\n");
scanf("%s", temp);



И опять хню несете... Ну и что выведет первая строка?
Вы бы хоть компилили то, что пишете...
Ведь, по вопросу судя, совсем зеленый спрашивает. Он же ваш код перепишет дословно и опять будет недоумевать, почему ни хрена не работает (или работает, но не так...)

79K
22 июля 2012 года
MaximusFk
12 / / 07.07.2012
Цитата: disputant
Цитата: MaximusFk
Цитата: disputant
Цитата: MaximusFk
Загвоздка в том, что функция scanf должна принимать именно формат ввода, а не строку, вывести эту строку лучше через printf
Пример:
printf("You enter filename: \n");
scanf(temp);



Вы таки забыли упомянутый вами же формат ввода :)


Формат принципиально вводить необязательно, коли просишь вот пример:
printf("Enter file name:%s\n");
scanf("%s", temp);



И опять хню несете... Ну и что выведет первая строка?
Вы бы хоть компилили то, что пишете...
Ведь, по вопросу судя, совсем зеленый спрашивает. Он же ваш код перепишет дословно и опять будет недоумевать, почему ни хрена не работает (или работает, но не так...)


Ты прав, но вот времени маловато было пришлось почти что копипастить, чтобы сократить время на обьяснения кину ссылку на страницу документации
cplusplus. com/reference/clibrary/cstdio/printf/

79K
22 июля 2012 года
MaximusFk
12 / / 07.07.2012
Вот еще добавить хочу
в функции scanf нужно отправлять ссылку на обьект scanf("%s", &temp);
кстати для вывода строки через printf необязательно вводить спецификатор формата, но можно printf("%s", "Enter file name: \n");
2.1K
22 июля 2012 года
disputant
95 / / 28.05.2007
Цитата: MaximusFk
Вот еще добавить хочу
в функции scanf нужно отправлять ссылку на обьект scanf("%s", &temp);



В данном случае temp объявлен как char temp[50];, так что тут &temp - ОШИБКА, тут надо просто temp - и молиться, чтоб имя файла было 1. без пробелов и 2. не длиннее 49 символов.

Или использовать другой, более разумный и безопасный подход :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог