Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Работа со строками


Автор: vik5252 12.5.2008, 23:16
Нужно сделать функцию типа 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", и временно приостанавливает выполнение программы.
Кто знает, в чем тут дело?

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

Код

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


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

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

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

Автор: vik5252 12.5.2008, 23:40
Вот так всегда, ищешь, ищешь - бесполезно.
Как написал на форум, через несколько минут нашел.
Здесь в строку 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 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)