массивов символов в C не совсем строки.Когда вы делаете
char hello[] = "Hello";
, это фактически эквивалентно
char hello[6] = { 'H', 'e', 'l', 'l', 'o', '\0' }
, что означает, что массив едва ли достаточно велик, чтобы содержать исходную строку.Любые данные, которые вы читаете или записываете после конца, будут вызывать неопределенное поведение, которое обычно проявляется как разрушение стека при записи после автоматических массивов.
== Как преодолеть: ==
Есть два варианта:
1) Убедитесь, что строка назначения достаточно длинная.Это будет обязанность звонящего сделать это.strcat()
работает таким образом.
1b) Вы можете помочь вызывающему абоненту, предоставив ему возможность указать размер строки назначения и не записывая после ее конца.strncat()
работает таким образом.
2) Выделите достаточно длинную третью строку назначения.Ответственный за вызов должен освободить (освободить) эту строку.@minitech предоставил пример этого.POSIX strdup()
работает таким образом.