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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 152, средняя оценка - 4.86
OVERPOWER8
 Аватар для OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
#1

Как избавиться от "deprecated conversion from string constant to ‘char*’" - C++

18.12.2009, 23:51. Просмотров 19711. Ответов 7
Метки нет (Все метки)

Здравствуйте.

У меня компилятор пишет:
_.cpp:15: warning: deprecated conversion from string constant to ‘char*’
_.cpp:16: warning: deprecated conversion from string constant to ‘char*’

Я понимаю, что это НЕ страшно и программа будет работать, но желательно, чтобы программа работала безо всяких warning.

Подскажите, как правильно записать 15 и 16 строки или как переделать программу:

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
#include <iostream>
#include <string.h>
using namespace std;
 
void StringChange(char** init, char** dest)
{
    char* temp;
    temp = *init;
    *init = *dest;
    *dest = temp;
}
 
int main()
{
    char* Name1 = "Winona";
    char* Name2 = "Boris";
    
    StringChange(&Name1, &Name2);
    
    puts(Name1);
    cout << endl;
    
    puts(Name2);
    cout << endl;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2009, 23:51     Как избавиться от "deprecated conversion from string constant to ‘char*’"
Посмотрите здесь:

C++ Ошибка: "invalid conversion from char* to char"
Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" C++
C++ invalid conversion from "const char*" to "char"
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) C++
error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" C++
C++ Ошибки в примере:"newline in constant"и"unexpected end of file while looking for precompiled header directive"
C++ Инициализация графического драйвера: Deprecated conversion from string constant to 'char*'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2910 / 1238 / 78
Регистрация: 27.05.2008
Сообщений: 3,321
19.12.2009, 13:12     Как избавиться от "deprecated conversion from string constant to ‘char*’" #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Компилятор прав.
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
 
#include <iostream>
#include <string.h>
using namespace std;
 
void StringChange(const char** init, const char** dest)
{
        const char* temp;
        temp = *init;
        *init = *dest;
        *dest = temp;
}
 
int main()
{
        const char* Name1 = "Winona";
        const char* Name2 = "Boris";
        
        StringChange(&Name1, &Name2);
        
        puts(Name1);
        cout << endl;
        
        puts(Name2);
        cout << endl;
}
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8507 / 2174 / 61
Регистрация: 07.03.2007
Сообщений: 10,848
Завершенные тесты: 1
04.03.2011, 18:11     Как избавиться от "deprecated conversion from string constant to ‘char*’" #3
CheshireCat, тогда еще один вопрос, а как победить в вызове функции:
C++
1
my_func("one-two-three");

и нет ли настроек игнорирования каких-то некритичных предупреждений, как в билдере к примеру?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.03.2011, 02:43     Как избавиться от "deprecated conversion from string constant to ‘char*’" #4
C
1
int my_func(const char *s);
а так лучше не делать
C
1
my_func((char *) "one-two-three");

но если делаешь, то прямо внутри функции преобразовывай и комментируй
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
01.07.2012, 18:32     Как избавиться от "deprecated conversion from string constant to ‘char*’" #5
а как избавиться от этой ошибки в моем примере
строка 33: warning: deprecated conversion from string constant to ‘char*’

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
#include <iostream>
  #include <string.h>
  #include <stdarg.h>
  #include <stdlib.h>
  
  using namespace std;
  
  const char *concat(char *s1, ...) {
      va_list par;
      char *cp = s1;
      int len = strlen(s1);
      
      va_start(par, s1);
   
      while ( cp = va_arg(par, char *) )
          len += strlen(cp);
      
      char *stroka = (char *)malloc(len + 1);
      strcpy(stroka, s1);
      va_start(par, s1);
      
      while ( cp = va_arg(par, char *) )
          strcat(stroka, cp);
      
      va_end(par);
   
      return stroka;
 }
 
 
int main () {
     const char *s;
     s = concat("\nNulla ", "Dies ", "Sine ", "Linea! ", NULL);
 
     cout << s;
  
      return 0;
 }
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
01.07.2012, 18:57     Как избавиться от "deprecated conversion from string constant to ‘char*’" #6
Spirited, Сделать параметр типа const char*.
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
01.07.2012, 20:03     Как избавиться от "deprecated conversion from string constant to ‘char*’" #7
в самом объявлении списка параметров const char * не помогло, но в строке где мы настраиваемся на первый параметр тоже нужно объявить константой вот что получилось:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char *concat(const char *s1, ...) {
        va_list par;
        const char *cp = s1;
        int len = strlen(s1);
 
        va_start(par, s1);
 
        while ( cp = va_arg(par, char *) )
                len += strlen(cp);
 
        char *stroka = (char *)malloc(len + 1);
        strcpy(stroka, s1);
        va_start(par, s1);
 
        while ( cp = va_arg(par, char *) )
                strcat(stroka, cp);
 
        va_end(par);
 
        return stroka;
}
т.е. изменил в первой и в третьей строке.
в любом случае спасибо)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2012, 01:43     Как избавиться от "deprecated conversion from string constant to ‘char*’"
Еще ссылки по теме:

C++ [Warning] deprecated conversion from string constant to 'char*'
C++ [Warning] deprecated conversion from string constant to 'char*'
C++ Ошибка: deprecated conversion from string constant to ‘char*’
C++ Компилятор выдает предупреждение при инициализации строки:deprecated conversion from string constant to char*
C++ Deprecated conversion from string constant to 'char*'

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.07.2012, 01:43     Как избавиться от "deprecated conversion from string constant to ‘char*’" #8
Цитата Сообщение от Spirited Посмотреть сообщение
строка 33: warning: deprecated conversion from string constant to ‘char*’
Цитата Сообщение от Spirited Посмотреть сообщение
C++
1
"\nNulla "
эта строка имеет тип const char *
нельзя присваивать адрес типа const type * указателю типа type *, так как происходит отбрасывание модификатора const

и сделано это для того, чтобы избежать записи в неизменяемую область, которая могла бы быть разрешена в результате такого неявного приведения типа (то есть приводить можно, но только явно)
Yandex
Объявления
02.07.2012, 01:43     Как избавиться от "deprecated conversion from string constant to ‘char*’"
Ответ Создать тему
Опции темы

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