Я хотел написать небольшую программу, которая должна переворачивать символы строки с помощью функции snprintf()
следующим образом. Вот где я заметил что-то странное.
int main() {
char dest[5] = "";
char source[5] = "abc";
for (int i = 0; i < 4; i++) {
char c = source[i];
snprintf(dest, 5, "%c%s", c, dest); //here, the current character gets appended in front
//of the String "dest" using snprintf() "recursively"
}
}
Что должна выводить программа: cba
Фактический вывод: ccba
При отладке программы вы можете видеть, чтомладшие два байта (dest[0]
и dest[1]
) всегда содержат одну и ту же информацию.
Кто-нибудь знает, почему это происходит и как это предотвратить?
Если я не знаюиспользуйте dest
дважды в аргументе, но вместо этого используйте временный буфер, такой как: snprintf(temporary, 5, "%c%s", c, dest)
и snprintf(dest, 5, "%s", temporary)
непосредственно после этого все работает как ожидалось.