- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
char str[STR_LEN + 1];
strncpy(str, inpust_str, STR_LEN);
xxx[STR_LEN] = '\0';
str[ strlen(str) ] = ':';
str[ strlen(str) + 1 ] = '1';
str[ strlen(str) + 2 ] = '\0';
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+96
char str[STR_LEN + 1];
strncpy(str, inpust_str, STR_LEN);
xxx[STR_LEN] = '\0';
str[ strlen(str) ] = ':';
str[ strlen(str) + 1 ] = '1';
str[ strlen(str) + 2 ] = '\0';
Попытка добавить ":1" к строке.
Первым же "str[ strlen(str) ] = ':';" гробим нулевой символ в конце строки. Дальнейшие вызовы "strlen" - просто фигня какая-то. Ну и портим память.
Но тут ещё нюанс.
Положим:
a. input_str = "abc";
b. STR_LEN = 10;
после строки 4 имеем в str = { 'a', 'b', 'c', '\0', ?, ?, ?, ?, ?, ?, '\0' };
Строка 6: strlen(str) = 3;
str [6] = ':'
после строки 6 имеем в str = { 'a', 'b', 'c', ':', ?, ?, ?, ?, ?, ?, '\0' };
Строка 7: strlen(str) = от 4 до 10; в зависимости от того, что там в вопросиках. Если в вопросиках нет нулевого символа, то точно вернётся 10.
str [10] = '1';
после строки 6 имеем в str = { 'a', 'b', 'c', ':', ?, ?, ?, ?, ?, ?, '1' };
'\0'-терминатор в конце строки str потерян!
Строка 8: strlen(str) в зависимости от того, что там в вопросиках вернёт число от 4 до ??????
И в итоге memory corruption - привет!
Но второй - точно
В случае, если длина src меньше, чем n, то остаток dest будет заполнен нулями.