Сам принцип программы не правильный. Буффер работает как по мне - не правильно, мы передаем содержимое буффера без учета размера самого _string, в итоге наш массив _string несколько раз перезаписывается мусором из памяти. Плюс передача массива в массив не правильно сделана.
А вообще есть такая вещь как new (buffer) type, конечно не по теме, но интересная;
Копировать один массив в другой массив так грубо тоже не стоит. По сути ошибка тут:
char *strcat_s(char *_string, char _buffer[100]) {
_string = _buffer;
return _string;
}
А если мы попытаемся присвоить пустую строку - будет ОЧЕНЬ плохо.
Массив присваивать другому массиву нельзя.
Не забывай, когда мы пишем массив вот так:
_string, по сути это тоже самое что писать &_string[0].
Имя массивая является ссылкой на первый элемент массива.
Когда как указатель на имя массива ссылается на первый элемент. Проще говоря.
char ch[10];
*ch == ch[0];
ch == &ch[0]
Сам же адрес массива извлекается так:
&ch. //Хотя по сути это адрес первого элемента массива.
Еще мы присваиваем весь буффер к стрингу, а надо лишь до элемента '\0'
<code lang="cpp">
char *strcat_s(char *_string, char _buffer[100]) {
for (int i = 0; i < 100; i++) {
if (_string[i] == '\0')
break;
_string[i] = _buffer[i];
}
return _string;
}
</code>
А вообще, если передаешь в функцию переменную, то передавай ее по ссылке &_string, а лучше в класс запихай.
В char *setString тоже фигня какая та.
Сишные функции, плюс ошибка на пустую строку. Я так сделал.
char *setString(char *_string = (char *)malloc(1)) {
char _buffer[100];
int i, _lenght = 0;
_string = '\0';
cout << "Введите строку:\n";
cin.getline(_buffer, 100);
_lenght += strlen(_buffer);
_string = (char *)realloc(_string, _lenght + 1);
_string = strcat_s(_string, _buffer);
//На всякий обнуляю буффер, а то малоли.
for (int i = 0; i < 100; i++)
_buffer[i] = '\0';
return _string;
}
Ну и вот примерчик, который делал по книге прата, что бы прояснить ТСу, как работают ссылки, указатели и т.п.
int main() {
int * a;
int * b;
char buffer[1000]; //буффер на 1000 байт
a = new (buffer) int;
*a = 100;
cout << "A = " << *a << endl;
cout << "Address A=" << a << endl;
b = new (buffer) int;
cout << "B = " << *b << endl;
cout << "Address B=" << b << endl;
*b = 99;
cout << "A = " << *a << endl;
cout << "B = " << *b << endl << endl;
cout << "Address A=" << a << endl;
cout << "Address B=" << b << endl << endl;
char * ch = new (buffer) char;
cout << "init char ch \n";
cout << "CH = " << ch << endl;
ch = "Hello World I am buffer ";
cout << "CH = " << ch << endl;
cout << "A = " << *a << endl;
cout << "B = " << *b << endl << endl;
cout << "Address A=" << a << endl;
cout << "Address B=" << b << endl;
cout << "Address CH=" << &ch << endl << endl;
cout << "init float f \n";
float * f = new (buffer) float;
cout << "F = " << *f;
*f = 3.14;
cout << "F = " << *f << endl;
cout << "CH = " << ch << endl;
cout << "A = " << int(*a) << endl;
cout << "B = " << int(*b) << endl << endl;
cout << "Address A=" << a << endl;
cout << "Address B=" << b << endl;
cout << "Address F=" << f << endl;
cout << "Address CH=" << &ch << endl << endl;
// Адресация массивово.
cout << "*ch =" << *ch
<< "\n ch =" << ch
<< "\n &ch =" << &ch
<< "\n &ch[0] =" << &ch[0]
<< "\n *ch == ch[0]. ch == &ch[0]";
system("pause");
return 0;