Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при работе со строками на С 
V
    Опции темы
peha84
Дата 18.1.2016, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.1.2016

Репутация: нет
Всего: нет



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

Есть у меня следующий код на С (Си):

Код

...
// Переменные
int i1; // переменная счетчик, используется для циклов    
int i2; // переменная счетчик, используется для циклов    
int i3; // переменная счетчик, используется для циклов    

char sender_number[] = "+79600000000";  // номер по-умолчанию
char SMS_text[] = "text";               // текст по-умолчанию
char test_SMS[] = "+CMGR: \"REC READ\",\"+79611122333\",,\"07/02/18,00:12:05+32\"\r\nHello, welcome to our SMS tutorial."; // тестовая СМС-ка
...
...
...
    printf("sender_number before = ->%s<-\r\n", sender_number); 
    printf("SMS_text before = ->%s<-\r\n", SMS_text); 
    
    // Ищем в цикле 3-й знак <"> и копируем всё до четвертого <">
    i2 = 0;  
    i3 = -1; 
    for (i1=0;i1<=strlen(test_SMS);i1++)
      {
        if (test_SMS[i1]=='\"') { i2++; }
          
        if (i2 == 3) 
        { 
          if (i3 >= 0) 
          { 
            sender_number[i3] = test_SMS[i1]; 
          } 
          i3++; 
        }  
      }
    sender_number[i3] = '\0';

    // Ищем в цикле 1-й знак <\n> и копируем всё до конца
    i2 = 0;  
    i3 = -1; 
    for (i1=0;i1<=strlen(test_SMS);i1++)
      {
        if (test_SMS[i1]=='\n') { i2++; }
          
        if (i2 == 1) 
        { 
          if (i3 >= 0) 
          { 
            SMS_text[i3] = test_SMS[i1]; 
          } 
          i3++; 
        }  
      }
    SMS_text[i3] = '\0';

    printf("sender_number after = ->%s<-\r\n", sender_number); 
    printf("SMS_text after = ->%s<-\r\n", SMS_text); 


Т.е. сначала объявил просто переменные. Потом мне нужно из test_SMS достать отправителя (sender_number) и текст СМС-ки (sender_number).
Вначале, там где:
Код

    printf("sender_number before = ->%s<-\r\n", sender_number); 
    printf("SMS_text before = ->%s<-\r\n", SMS_text); 

выводит :
Код

sender_number before = ->+79600000000<-
SMS_text before = ->text<-

а вот после обработки, там где:
Код

    printf("sender_number after = ->%s<-\r\n", sender_number); 
    printf("SMS_text after = ->%s<-\r\n", SMS_text); 

выводит ерунду:
Код

sender_number after = ->, welcome to our SMS tutorial.<-
SMS_text after = ->Hello, welcome to our SMS tutorial.<-

Помогите, пожалуйста, разобраться..... Второй день бьюсь  smile  и понять не могу. Мне нужно чтоб получилось:
Код

sender_number after = ->+79611122333<-
SMS_text after = ->Hello, welcome to our SMS tutorial.<-


Библиотеку могу подключить string.h. 
stdlib.h не могу, так как программирую микроконтроллер, у которого памяти всего 1024 байт и они практически все будут задействованы.

Это сообщение отредактировал(а) peha84 - 18.1.2016, 12:31
PM MAIL   Вверх
math64
Дата 18.1.2016, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(peha84 @  18.1.2016,  12:30 Найти цитируемый пост)
Код

char SMS_text[] = "text";               // текст по-умолчанию

под SMS_text выделено 4 байта + 1 под '\0'
в то время, как в
Цитата(peha84 @  18.1.2016,  12:30 Найти цитируемый пост)
Код

char test_SMS[] = "+CMGR: \"REC READ\",\"+79611122333\",,\"07/02/18,00:12:05+32\"\r\nHello, welcome to our SMS tutorial."; // тестовая СМС-ка

нужно как минимум 35 байт.
Нужно под текст сообщения выделить буфер большего размера либо выделять память динамически.
Например, так:
Код

char SMS_text[1024] = "text";               // текст по-умолчанию
...
        if (i3 < sizeof(SMS_text) - 1) // Проверка на переполнение буфера.
        {
          if (i3 >= 0) 
          { 
            SMS_text[i3] = test_SMS[i1]; 
          } 
          i3++; 
       }

PM   Вверх
peha84
Дата 18.1.2016, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.1.2016

Репутация: нет
Всего: нет



Спасибо большое! Вы меня спасли  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.