Как работает склеивание строк в C
У меня есть код, в котором я создал две динамических строки, а также ввожу с клавиатуры их размер, и после склеиваю их:
setlocale(LC_ALL, "Rus");
int number;
scanf_s("%d\n", &number);
char* stroka1 = (char*)malloc(number * sizeof(char));
gets(stroka1);
char* stroka2 = (char*)malloc(number * sizeof(char));
gets(stroka2);
strcat(stroka1, stroka2);
printf("%s", stroka1);
free(stroka1);
free(stroka2);
Однако я кое-что заметил: если я ввожу размер строк, например равным 6, а дальше ввожу первую строку: ros, а затем вторую строку: es, то все работает нормально - выводит roses. Однако, если я ввожу размер строк 6, и дальше первую строку: govern, и вторую строку: burger, то он выдает ошибку. Почему так? Вроде бы логично, что если я ввел размер двух строк равным 6, то я могу ввести две строки, у которых размер 6 и склеить их. Может я не понимаю принципы работы строк или принципы работы strcat. Объясните пожалуйста
Ответы (1 шт):
scanf_s("%d\n", &number);
char* stroka1 = (char*)malloc((2 * number + 1) * sizeof(char));
The strcat() function concatenates the first string and the second string, and the result is stored in the first string.
Функция strcat () объединяет первую и вторую строки, а результат сохраняется в первой строке.
Это значит, что место, на которoe указывает первая строка, должно быть достаточно большим, чтобы туда поместился результат.