Witam wszystkich. =]
Otóż realizuję takie oto sobie zadanko:
Napisz funkcję, która do końca stringu podanego w jednej tablicy, dołączy
string, będący w drugiej
tablicy. Argumentami tej funkcji powinny być:
- adres tablicy docelowej,
- jej rozmiar,
- adres tablicy ze stringiem dołączanym.
Funkcja powinna przerwać dołączanie stringu w przypadku zapełnienia całej
tablicy.
I napisałem taki oto kod w Microsoft Visual Studio:
#include "stdafx.h"
#include <iostream>
using namespace std;
void dolacz(char docelowa[], int rozmiar, char dolaczana[]); //deklaracja funkcji
//***********************************
int _tmain(int argc, _TCHAR* argv[])
{
char bazowa[]={"Baza"};
cout<<"Przed dolaczeniem:\n";
int rozmiar1=0; //inicjalizacja rozmiaru bazowego C-stringu
for(int i=0; ; i++) //wypisanie i policzenie rozmiaru bazowej tablicy
{
rozmiar1++;
if(bazowa[i]==NULL)
break;
cout<<bazowa[i];
}
char dodatkowa[]={"Dolaczenie"};
cout<<"\nTo sie dolaczy:\n";
int rozmiar2=0; //inicjalizacja rozmiaru dołączanego C-stringu
for(int i=0; ; i++) //wypisanie i policzenie rozmiaru dołączanej tablicy
{
rozmiar2++;
if(dodatkowa[i]==NULL)
break;
cout<<dodatkowa[i];
}
int rozmiar = rozmiar1 + rozmiar2 - 1; //inicjalizacja rozmiaru całego C-stringu(po dołączeniu)
cout<<endl;
dolacz(bazowa, rozmiar, dodatkowa); //Wywołanie funkcji
cout<<endl;
system("pause");
return 0;
}
//************************************
void dolacz(char docelowa[], int rozmiar, char dolaczana[])
{
cout<<"Po dolaczeniu:\n";
int rozmiar2=0;
for(int i=0; ; i++) //rozmiar dołączanej tablicy
{
rozmiar2++;
if(dolaczana[i]==NULL)
break;
}
for(int i=rozmiar-rozmiar2; ; i++) //operacja dołączania
{
docelowa[i]=dolaczana[i-(rozmiar-rozmiar2)];
if(docelowa[i] == NULL)
break;
}
for(int i=0; ; i++) //wypisanie po dołączeniu
{
if(docelowa[i]==NULL)
break;
cout<<docelowa[i];
}
}
Jednak podczas kompilacji, a konkretniej wywoływania się funkcji system("pause"), która to prosi mnie o wciśnięcie jakiegokolwiek klawisza, po wciśnięciu go program się crashuje. Wyskakuje taki komunikat:
Run- Time Check Failure #2 - Stack around the variable 'bazowa' was corrupted.
Co może być powodem tego błędu? Dodam, że w kompilatorze Bloodshed Dev-C++ tego problemu nie ma.
Z góry dziękuję =]