- 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" - просто фигня какая-то. Ну и портим память.
guest 23.03.2010 18:20 # −0.2
benderlog 24.03.2010 06:11 # +2.6
Но тут ещё нюанс.
Положим:
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 - привет!
benderlog 23.03.2010 18:29 # 0
Но второй - точно
guest 24.03.2010 11:55 # +2.4
guest 25.03.2010 03:43 # 0
В случае, если длина src меньше, чем n, то остаток dest будет заполнен нулями.
Dummy00001 28.03.2010 00:44 # +1
benderlog 25.03.2010 04:48 # 0