Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Polus
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
#1

Предупреждение: формат не является строковой константой, и не заданы аргументы форматирования - C++

12.04.2014, 16:14. Просмотров 298. Ответов 2
Метки нет (Все метки)

Если не считать мусор, то всё работает правильно!
Входные данные:
13:00
5
Li 13:15
Ka 14:00
lop 13:12
kir 15:54
jim 13:00
Выходные данные:
��D (мусор)
jim
lop
Li
Ka
Программа выдает два предупреждения:
main.cpp: В функции «int main()»:
main.cpp:14:34: предупреждение: format «%s» expects argument of type «char*», but argument 2 has type «char (*)[21]» [-Wformat]
main.cpp:37:23: предупреждение: формат не является строковой константой, и не заданы аргументы форматирования [-Wformat-security]

Не ясны предупреждения. Чего хочет? Как записать правильно?
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
38
39
40
41
#include <cstdio>
#include <cstring>
int main()
{
    char buf[21];
    int i,j,N,time,k,t,buftime,m,p;
    m = t = 0;
    scanf("%d%*c%d",&i,&j);
    time = i*60 + j;
    scanf("%d",&N);
    char mas[N][21];
    int tim[N];
    for (i=0;i<N; i++){
    scanf("%s%d%*c%d", &buf,&t,&j);
    buftime = t*60+j;
    if(time+120>=buftime){
        tim[m] = buftime;
        strcpy(mas[m],buf);
        m++;
    }
    }
    t = 0;
    for (i=0;i<N-1; i++)
        for (j=i+1;j<N;j++)
            if(tim[i]<tim[j]){
                k = tim[i];
                tim[i] = tim[j];
                tim[j] = k;
               strcpy (buf,mas[i]);
               strcpy(mas[i],mas[j]);
               strcpy(mas[j],buf);
          }
 
 
    for (i=m; i>=0; i--){
        printf (mas[i]);
        printf ("\n");
    }
 
return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2014, 16:14     Предупреждение: формат не является строковой константой, и не заданы аргументы форматирования
Посмотрите здесь:

Каким образом выделяется память при инициализации строковой константой указателя - C++
Доброго времени суток. Хотелось бы более подробно узнать некоторые моменты относительно указателей и динамического выделения памяти....

Заданы длины сторон треугольника. Определить, является ли он равнобедренным - C++
Прошу помощи! Заданы длины сторон треугольника. Определить, является ли он равнобедренным.

Проблема с константой! - C++
Помогите додумать код,чтоб не было ошибки. #include &lt;iostream&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { ...

Case с отрицательной константой - C++
switch (dir) { case 'С': case 'с': switch (cmd) { case '1': dir = 'З'; break; case '-1': dir = 'В'; ...

Инициализация объекта строго константой - C++
Пишу class Class { private: const int *Int; public: Class(const int *b) { Int=b; } int get() { return *Int; } ...

Поясните ошибку, связанную с константой. - C++
Делаю в VS 2012 #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main( int argc, char** argv ) { ...

Массивы C++. Ошибка: M должна быть константой - C++
Пытаюсь сделать массив, вот что вышло. Выбивает ошибку, что M должна быть константой (15 строка). Как это исправить? #include&lt;iostream&gt; ...

Как обычную переменную сделать константой - C++
Как можно константой сделать обычную переменную, а то хочу создать матрицу nxn а мне VS требует что бы n1 и n2 были константами, или как...

Как обычную переменную на время сделать константой? - C++
Как обычную переменную на время сделать константой?

Определить массив, не указывая его размерность константой - C++
Дело в том, что хочу написать прогу для решения СЛАУ методом Зейделя и не могу определить массив не указывая его размерность константой.Два...

Как в классе правильно объявить массив с константой в качестве размерности? - C++
Приветствую всех! Написал следующий код: Unit1.h class WireBare_Open { const int METAL_MAX; const int SECTION_MAX; ...

Вызов не константной функции, изменяющей свойства класса, из константой . Возможно? - C++
Сразу к делу: #include &lt;QCoreApplication&gt; class Base { public: Base(); virtual int DoSomething(const int&amp; var)...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.04.2014, 16:21     Предупреждение: формат не является строковой константой, и не заданы аргументы форматирования #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
 scanf("%s%d%*c%d", buf,&t,&j)
Polus
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
12.04.2014, 18:59  [ТС]     Предупреждение: формат не является строковой константой, и не заданы аргументы форматирования #3
Теперь предупреждений нет (второе тоже сделал), но мусор остался. Так из-за чего он? Выхода за границы массива не вижу.
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
38
39
40
41
42
43
44
45
46
47
48
49
#include <cstdio>
#include <cstring>
int main()
{
    char buf[21];
    int i,j,N,time,k,t,buftime,m,p;
    m = t = 0;
    scanf("%d%*c%d",&i,&j);
    time = i*60 + j;
    scanf("%d",&N);
    char mas[N][21];
    int tim[N];
    for (i=0;i<N; i++){
    scanf("%s%d%*c%d", buf,&t,&j);
    buftime = t*60+j;
    if(time+120>=buftime){
        tim[m] = buftime;
        strcpy(mas[m],buf);
        m++;
    }
    }
   
    t = 0;
    for (i=0;i<N-1; i++)
        for (j=i+1;j<N;j++)
            if(tim[i]<tim[j]){
                k = tim[i];
                tim[i] = tim[j];
                tim[j] = k;             
               strcpy (buf,mas[i]);
               strcpy(mas[i],mas[j]);
               strcpy(mas[j],buf);
 
                }
 
 
    for (i=m; i>=0; i--){
        printf ("%s",mas[i]);
        printf ("\n");
    }
 
 
 
 
 
 
 
    return 0;
}
Добавлено через 1 час 7 минут
Всё нашёл косяк. У меня значение m всегда опережало размер массива, поэтому в конце надо декрементировать m.
Yandex
Объявления
12.04.2014, 18:59     Предупреждение: формат не является строковой константой, и не заданы аргументы форматирования
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru