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

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Dimarik__
 Аватар для Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
22.03.2011, 19:13     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #1
C++
1
2
string s = "555 44 55 66";//размер строки заранее неизвестен
                char* p = strtok(s.c_str(), ' ');
не нравится такое компилятору. пишет
Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2011, 19:13     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
Посмотрите здесь:

C++ error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR" C++
Невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *" C++
error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" C++
error C2664: CWnd::MessageBoxW: невозможно преобразовать параметр 2 из "long" в "LPCTSTR" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
22.03.2011, 19:20     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #2
так делать нельзя, потому что strtok кромсает, подаваемую ему строку. Для стринга такое внешнее вмешательство неприемлемо. Можешь завести динамический массив и скопировать символы в него. А уже этот массив подавaть в strtok.
Dimarik__
 Аватар для Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
22.03.2011, 20:10  [ТС]     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #3
Уже запарился с этими плюсами.
Вот код на C#. Можете помочь мне его перевести на c++?
C#
1
2
3
4
5
6
string []strarray = s1.Split(' ');
            int[] iArray = new int[strarray.Length];
            for (int i = 0; i < strarray.Length; i++)
            {
                iArray[i] = Convert.ToInt16(strarray[i]);
            }
Вообще у меня исходная строка имеется как объект класса string (c++), она выглядит так:
12 156 144 1 0 55
ну и так далее. Думаю смысл понятен. Числа, разделенные пробелами. Мне эти числа надо тупо перевести в массив int
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
22.03.2011, 20:19     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #4
используй stringstream
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
22.03.2011, 20:28     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #5
C++
1
2
3
4
string s = "555 44 55 66";
vector<int> a;
istringstream ss(s);
copy(istream_iterator<int>(ss), istream_iterator<int>(), back_inserter(a));
Dimarik__
 Аватар для Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
22.03.2011, 21:06  [ТС]     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #6
а можно это сделать динамическим массивом (без вектора)?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.03.2011, 21:15     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #7
Dimarik__, Так можно, если числа в строке строго разделены одним пробелом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <algorithm>
#include <string>
#include <iostream>
#include <sstream>
#include <cstdlib>
 
int main(){
  std::string s = "555 44 55 66";
  size_t len = std::count(s.begin(), s.end(), ' ') + 1;
  int *a = new int[len];
  std::istringstream ss(s);
  for(int i = 0; i < len; ++i){
    ss >> s;
    a[i] = atoi(s.c_str());
    std::cout << a[i] << ' ';
  }
  delete[] a;
  return 0;
}
Dimarik__
 Аватар для Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
22.03.2011, 21:46  [ТС]     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #8
#include <algorithm>
- а это зачем?

Добавлено через 3 минуты
ss >> s;
- и каким тут образом мы двигаемся по этим числам?
Если я не ошибаюсь, если прописать
cin>>"555 44";
то в переменную будет записано 555.
как я понял, каждая a[i] будет 555. Или я где-то ошибаюсь?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.03.2011, 22:12     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #9
Цитата Сообщение от Dimarik__ Посмотреть сообщение
#include <algorithm>
- а это зачем?
Инициализация алгоритмов из STL.
Цитата Сообщение от Dimarik__ Посмотреть сообщение
ss >> s;
- и каким тут образом мы двигаемся по этим числам?
ss - это входной поток, в котором записана наша строка.И оператором >> мы читаем данные в строку, разделителем служит пробел.

Цитата Сообщение от Dimarik__ Посмотреть сообщение
Если я не ошибаюсь, если прописать
cin>>"555 44";
то в переменную будет записано 555.
Не совсем понял, что Вы имеете ввиду.
Цитата Сообщение от Dimarik__ Посмотреть сообщение
как я понял, каждая a[i] будет 555. Или я где-то ошибаюсь?
Каждая a[i] будет местить в себе очередное число строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2011, 23:33     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
Еще ссылки по теме:

error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" C++
C++ Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"
C++ Невозможно преобразовать параметр 2 из "char" в "const char *"

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.03.2011, 23:33     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" #10
Цитата Сообщение от Dimarik__ Посмотреть сообщение
#include <algorithm>
- а это зачем?
http://www.cplusplus.com/reference/algorithm/
Yandex
Объявления
22.03.2011, 23:33     Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
Ответ Создать тему
Опции темы

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