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

Функция strtok. Представление телефонного номера в виде строки. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Время года http://www.cyberforum.ru/cpp-beginners/thread373671.html
Здравствуйте! Помогите пожалуйста с решением: По номеру месяца определить его название и время года к которому он относится. Консольное приложение. Заранее благодарен!
C++ Красная бактерия Доброго времени суток! Ребят помогите плизик с задачей: Имеется n бактерий красного цвета. Через 1 такт времени красная бактерия меняется на зелёную, затем через 1 такт времени делится на красную и зелёную. Сколько будет всех бактерий через k тактов времени? В консольном приложении. Заранее благодарен! http://www.cyberforum.ru/cpp-beginners/thread373668.html
Найти и вывести на экран слова, которие повторяются C++
Доброго времени суток, форумчани. Помогите пожалуста решить задачу на Си (просто Си). Просто я начал изучать этот язык недавно. Нужно в введеной строке найти и вывести на экран слова, которие повторяються. Зарание всем спасибо.
C++ Использование аргументов в конструкторе при объявлении массива - }{ЭЛП
Здравствуйте. Мне нужен массив класса button. Короче: button but(1);//работает button but;//работает button but(1);//не работает Как сделать чтобы 3-ий вариант работал?
C++ Не могу понять что от меня хотят :( http://www.cyberforum.ru/cpp-beginners/thread373655.html
Помогите разобраться в ошибке. Так как я только-только начал писать в С++ не могу понять из-за чего эта ошибка. http://*************/s/1gVKc
C++ Микрофон и частота сигнала Доброго времени суток. Подскажите пожалуйста можно ли как то считывать звук с микрофона через с++ и достать частоту этого сигнала?? Если можно то как подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
27.10.2011, 20:11     Функция strtok. Представление телефонного номера в виде строки.
Цитата Сообщение от Navern Посмотреть сообщение
Запутался в функции strtok. Причем уже сделал для неё пару упражнений, вроде понимаю как она работает. По крайней мере с предложением из слов. Задание звучит так, используя функцию strtok, разбить телефонный номер формата (555) 555-5555, введенный как строку, на лексемы. Где первой лексемой будет код, второй первые три цифры номера, а третьей после четыре цифры. Я смог выбить код, и перевести его в тип данных int. Но когда пытаюсь продолжать обработать строку, то вылазит ошибка выхода за границы массива.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   char phoneNumber[40];
   char code[3];
   int codeRegion;
   char *codePtr = NULL;
   char *numberPtr = NULL;
 
   cout << "Enter the telephone number in format: (555) 555-5555:\n";
   cin >> phoneNumber;
    
   codePtr = strtok(phoneNumber, " ");
    
   for ( int i = 0; i < 3; i++)
      code[i] = codePtr[i+1];
  
   codeRegion = atoi(code);
    
   codePtr = strtok(NULL, " ");
Проблема в том, что вы портите ту строку, которую сканируете внутри strtok. То есть вам возвращается указатель из этой функции, который указывает на копию вашей строки phoneNumber, которая была сохранена в функции strtok.

Нет, не то я написал. У вас переменная code объявлена, как хранящая 3 символа. А для завершающего 0 места в ней нет. Поэтому когда вы выполняете

codeRegion = atoi(code);
то эта операция выходит за гринцу вашего массива code.

ОБъявите массив code по крайней мере как

C++
1
char code[4];
и после

C++
1
2
for ( int i = 0; i < 3; i++)
      code[i] = codePtr[i+1];
вставьте

C++
1
code[3] = '\0';
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru