Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
1

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

22.03.2011, 19:13. Просмотров 2795. Ответов 9
Метки нет (Все метки)

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

error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *"
for(int i = 0; i< 5; i++) { wr_struc (list); if...

Error C2664: atoi: невозможно преобразовать параметр 1 из "_TCHAR *" в "const char *" Как исправить эту ошибку в коде?
#include "stdafx.h" #define _XOPEN_SOURCE 500 #include <conio.h>...

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что "char *concat(char *,...)":...

Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"
почему выдаёт ошибку? int RegClass(WNDPROC Proc,LPCTSTR szName,UINT...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]"
Вроде все правильно а все равно не работает. Подскажите в чем ошибка ...

9
slice
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
22.03.2011, 19:20 2
так делать нельзя, потому что strtok кромсает, подаваемую ему строку. Для стринга такое внешнее вмешательство неприемлемо. Можешь завести динамический массив и скопировать символы в него. А уже этот массив подавaть в strtok.
2
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
22.03.2011, 20:10  [ТС] 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
0
slice
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
22.03.2011, 20:19 4
используй stringstream
1
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,213
Завершенные тесты: 3
22.03.2011, 20:28 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));
1
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
22.03.2011, 21:06  [ТС] 6
а можно это сделать динамическим массивом (без вектора)?
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
22.03.2011, 21:15 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;
}
1
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
22.03.2011, 21:46  [ТС] 8
#include <algorithm>
- а это зачем?

Добавлено через 3 минуты
ss >> s;
- и каким тут образом мы двигаемся по этим числам?
Если я не ошибаюсь, если прописать
cin>>"555 44";
то в переменную будет записано 555.
как я понял, каждая a[i] будет 555. Или я где-то ошибаюсь?
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
22.03.2011, 22:12 9
Цитата Сообщение от Dimarik__ Посмотреть сообщение
#include <algorithm>
- а это зачем?
Инициализация алгоритмов из STL.
Цитата Сообщение от Dimarik__ Посмотреть сообщение
ss >> s;
- и каким тут образом мы двигаемся по этим числам?
ss - это входной поток, в котором записана наша строка.И оператором >> мы читаем данные в строку, разделителем служит пробел.

Цитата Сообщение от Dimarik__ Посмотреть сообщение
Если я не ошибаюсь, если прописать
cin>>"555 44";
то в переменную будет записано 555.
Не совсем понял, что Вы имеете ввиду.
Цитата Сообщение от Dimarik__ Посмотреть сообщение
как я понял, каждая a[i] будет 555. Или я где-то ошибаюсь?
Каждая a[i] будет местить в себе очередное число строки.
0
easybudda
Модератор
Эксперт CЭксперт С++
10103 / 6012 / 1507
Регистрация: 25.07.2009
Сообщений: 11,398
22.03.2011, 23:33 10
Цитата Сообщение от Dimarik__ Посмотреть сообщение
#include <algorithm>
- а это зачем?
http://www.cplusplus.com/reference/algorithm/
0
22.03.2011, 23:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2011, 23:33

Error C2440: инициализация: невозможно преобразовать "const char [12]" в "char *"
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace...

Невозможно преобразовать параметр 2 из "char" в "const char *"
Ошибка strcpy: невозможно преобразовать параметр 2 из &quot;char&quot; в &quot;const char *&quot; ...

невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR"
msoftcon.h //msoftcon.h //declarations for Lafore's console graphics...


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

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

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