Самообучающийся C полон сюрпризов. Я делаю это короткий фрагмент кода, чтобы проверить strcat()
, который якобы присоединяет второй параметр к первому:strcat() дублирует свой второй параметр
#include <stdio.h>
#include <string.h>
char s1[4] = "Foo ";
char s2[] = "Bar";
int main(void) {
strcat(s1, s2);
printf("%s %d %d \n", s1, strlen(s1), strlen(s2));
return 0;
}
Я ожидал, что некоторые ошибки переполнения поскольку s1
представляет собой массив из 4-х символов, но вместо этого я получил это:
Foo BarBar BarBar 10 6
Я сделал это в Windows, используя MS Visual Studio Express 2013 (который, кстати, поднимает некоторые предупреждения об использовании strcat). Итак ... почему strcat дублирует значение s2? Это не в документации.
Чистая удача ...... – Igor
Переполнение может вызывать много разных поведений. Язык не определяет, что происходит после переполнения. Это неопределенное поведение. Все может случиться! – jweyrich
вам нужно понять, что C имеет модель как можно более простую. вы должны сначала адаптировать мир без исключений. – HuStmpHrrr