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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со строками, Прога компилируется, но ОС выдает ошибку 
:(
    Опции темы
vik5252
Дата 12.5.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно сделать функцию типа strcat(), но чтоб она прибавляла не всю строку, а указанное количество символов.
Вот код :
Код

#include "stdafx.h"

void summa_strok( char *s1, char *s2, int i=0 );

int main() 
{    
    char str1[] = "This is test: ";
    char str2[] = "123456789";

    cout << "\n " << str1;
    summa_strok( str1, str2 );
    cout << "\n\n " << str1;
    strcpy_s( str1, "This is test: " );
    cout << "\n\n " << str1;
    summa_strok( str1, str2, 5 );
    cout << "\n\n " << str1 << "\n\n ";
  
    return 0;
}

void summa_strok( char *s1, char *s2, int i )
{
    while (*s1) s1++ ;
    if ( i==0 ) i=strlen(s2);
    while ( *s2 && i )
    {
    *s1 = *s2;
    s1++;
    s2++;
    i--;
    }
    *s1 = '\0';
}

Компилируется без ошибок и замечаний, и даже выдает верный результат, но в процессе выполнения Windows XP "выкидывает" на экран окошко с информацией об ошибке "Stack around the variable 'str1' was corrupted", и временно приостанавливает выполнение программы.
Кто знает, в чем тут дело?
PM MAIL   Вверх
bronislav
Дата 12.5.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну для начала, вынеси строки из стека - используй динамическое распределение памяти

Код

char* srt = new char [100]; // в скобках длина строки


А как ты складываешь строки?
У тебя для строки s1 выделено сначала 14 байт, а потом ты к ним добавляешь информацию из s2, хотя перераспределение памяти не делаешь.

Вот система и ругаеться, что ты обращаешься к памяти, которая тебе не принадлежит.

Да и само сложение строк у тебя как-то криво реализовано


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
vik5252
Дата 12.5.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот так всегда, ищешь, ищешь - бесполезно.
Как написал на форум, через несколько минут нашел.
Здесь в строку str1 функция summa_strok добавляет символы.
А объявлена эта строка, как массив из 14-ти символов, и когда добавляются еще символы - то неизвестно, какая (возможно важная) информация при этом стирается.
Нужно определить эту строку не так :
Код

    char str1[] = "This is test: ";
    char str2[] = "123456789";

а, например, так :
Код

    char str1[50] = "This is test: ";
    char str2[] = "123456789";

Сам с собой пообщался - и уже веселей   smile

Добавлено через 2 минуты и 15 секунд
А чего криво-то ?
Ну покажи тогда, как надо, чтоб не криво было ?

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

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

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

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

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


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

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


 




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


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

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