0 / 0 / 1
Регистрация: 18.07.2017
Сообщений: 21
1

Указатели на строки

08.08.2017, 02:12. Показов 1241. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Нужно выполнить такую задачу: сформировать имя файла по времени, чтобы потом его создать и использовать. Я написал такой код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char *fname;
 
 
int main(){
 
    char s1[40]={0};
    const time_t timer = time(NULL);
    u = localtime(&timer);
    strftime(s1, 40, "%d.%m.%Y %H:%M:%S ", u);
 
    //здесь все нормально, формируется строка
    printf("file name: %s\n", s1);
    fname=s1;
 
 
    //а вот здесь уже выдает ошибку
    ofmt = av_guess_format( NULL, fname, NULL );
 
}
что я не так делаю с указателями?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2017, 02:12
Ответы с готовыми решениями:

Указатели, символьные строки и функции: удалить из строки слово с заданным номером
Функция удаляет из строки слово с заданным номером: не знаю как делать, сделал через swich case но...

Указатели.Строки и указатели
Вот условия ввода строки:Вводить и обрабатывать строки в цикле до тех пор пока первый символ не...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....

указатели и строки?
Люди помогите понять, ни как не дается это страшное слово указатель. Так в общем немного ясно, не...

4
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
08.08.2017, 09:17 2
gogoer, что за ошибка?
0
0 / 0 / 1
Регистрация: 18.07.2017
Сообщений: 21
08.08.2017, 11:52  [ТС] 3
выдает ошибку segmentation fault во время выполнения, программа прекращает работу.
0
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
08.08.2017, 12:19 4
gogoer,

попробуй так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(){
 
    char s1[40]={0};
    const time_t timer = time(NULL);
    u = localtime(&timer);
    strftime(s1, 40, "%d.%m.%Y %H:%M:%S ", u);
 
    //здесь все нормально, формируется строка
    printf("file name: %s\n", s1);
    const char* fname = s1;
 
 
    //а вот здесь уже выдает ошибку
    ofmt = av_guess_format( NULL, fname, NULL );
 
}
0
0 / 0 / 1
Регистрация: 18.07.2017
Сообщений: 21
09.08.2017, 00:56  [ТС] 5
_SayHello, спасибо, но все равно сыпется в ошибку.

Вот более полный кусок кода:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
            //генерируем имя выходного файла
            char s1[40]={0};
            const time_t timer = time(NULL);
            u = localtime(&timer);
            strftime(s1, 40, "%d.%m.%Y-%H:%M:%S.avi", u);
            const char* sFileOutput=s1;
 
 
            //char *sFileOutput = "08.08.2017-23.23.23.avi";
 
 
            //открываем выходной файл
            ofmt = av_guess_format( NULL, sFileOutput, NULL );
            ofcx = avformat_alloc_context();
            ofcx->oformat = ofmt;
            avio_open2( &ofcx->pb, sFileOutput, AVIO_FLAG_WRITE, NULL, NULL );
 
            // Создаем выходной поток
            ost = avformat_new_stream( ofcx, NULL );
            avcodec_copy_context( ost->codec, iccx );
 
            ost->sample_aspect_ratio.num = iccx->sample_aspect_ratio.num;
            ost->sample_aspect_ratio.den = iccx->sample_aspect_ratio.den;
 
            // подгонка частоты кадров
            ost->r_frame_rate = ist->r_frame_rate;
            ost->avg_frame_rate = ost->r_frame_rate;
            ost->time_base = av_inv_q( ost->r_frame_rate );
            ost->codec->time_base = ost->time_base;
 
            printf("step 4 \n");
 
            avformat_write_header( ofcx, NULL );
 
            printf("step 5 \n");
 
            snprintf( ofcx->filename, sizeof( ofcx->filename ), "%s", sFileOutput );
Если использовать ваш вариант, т.е.
C
1
const char* sFileOutput=s1;
, то при запуске программы получаем:

step 1
step 4
[avi @ 0x2ba1610] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
[avi @ 0x2ba1610] reserve_index_space:0 master_index_max_size:256
Segmentation fault


Если же раскомментировать строку
C
1
//char *sFileOutput = "08.08.2017-23.23.23.avi";
, т.е. указать имя явно, то все работает.
Имеем такой вывод программы:

step 1
step 4
[avi @ 0x30a69f0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
[avi @ 0x30a69f0] reserve_index_space:0 master_index_max_size:256
[avi @ 0x30a69f0] duration_est:36000.000, filesize_est:0.0GiB, master_index_max_size:256
step 5


Что не так с созданием имени файла?
0
09.08.2017, 00:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2017, 00:56
Помогаю со студенческими работами здесь

Указатели и строки
Решил вспомнить, как организовывать работу с указателями на строках. Есть такой фрагмент кода....

Строки и указатели с++
1. С клавиатуры вводится полный путь к файлу. Напишите программу, которая выделяет из этой строки...

Указатели и строки
Здравствуйте. Учу указатели (и строки); появилась куча неясных мне моментов, поэтому прошу...

Указатели и строки
Здравствуйте! Помогите решить такую задачу Найти в строке последовательности , состоящие из одного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru