Как работает склеивание строк в 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 шт):

Автор решения: Igor
scanf_s("%d\n", &number);
char* stroka1 = (char*)malloc((2 * number + 1) * sizeof(char));

strcat

The strcat() function concatenates the first string and the second string, and the result is stored in the first string.

Функция strcat () объединяет первую и вторую строки, а результат сохраняется в первой строке.

Это значит, что место, на которoe указывает первая строка, должно быть достаточно большим, чтобы туда поместился результат.

→ Ссылка