Множество очевидных догадок в других ответах, но быстрое предложение.
Прежде всего, написанный код должен работать (и фактически работает в Visual Studio 2010). Ключ кроется в деталях 'strncpy' - это не подразумевает добавление завершающего символа null
, если длина источника не меньше длины назначения (что в данном случае и есть). С другой стороны, strcpy
включает терминатор null
во всех случаях, что говорит о том, что ваш компилятор неправильно обрабатывает функцию strncpy
.
Итак, если это не работает на вашем компиляторе, вам, вероятно, следует инициализировать ваш временный буфер следующим образом:
char string[50] = {0}; // initializes all the characters to 0
// below should be 50, as that is the number of
// characters available in the string (not 49).
strncpy(string, "StringToCompare", 50);
Однако, я подозреваю, что это, скорее всего, просто пример, и в реальном мире ваша исходная строка имеет длину 49 (опять же, вы должны передать от 50 до strncpy
в этом случае) символов или более, в этом случае терминатор NULL равен НЕ копируется во временную строку.
Я бы повторил предложения в комментариях, чтобы использовать std::string
, если доступно. Он позаботится обо всем этом для вас, чтобы вы могли сосредоточиться на своей реализации, а не на этих банальных деталях.