yarkov
@yarkov
Помог ответ? Отметь решением.

Почему программа выдает не тот результат, который нужен?

Я уже наверное задолбал своими тупыми вопросами =) Продолжим!
Чтобы не писать длинный вопрос, я дам ссылку:
https://github.com/yarkovaleksei/passgen/issues/1
Код тут:
https://github.com/yarkovaleksei/passgen/blob/mast...
Я сейчас в локальной ветке пытаюсь пофиксить, но тут такой трэш...
Вот как я пытаюсь исправить:
if (length < 1)
	{
		while (isTyped != 1)
		{
			int t;
			char *ct = (char *)malloc(4); // хочу ограничить ввод числом 999
			printf("%s\n", _("Type in a password length"));
			scanf("%s", ct);

			if (isNumber(ct) == 1) // функция isNumber принимает char[], поэтому изврат с scanf("%s", ct)
			{
				t = atoi(ct); // конвертируем в число, если строка из цифр (убейте меня)
				if (t < 1) {
					isTyped = 0;
				} else {
					length = t;
					isTyped = 1;
				}
			} else {
				isTyped = 0;
			}
		}
	}

А теперь внимание на скриншот:
4d67935b89ef4c0a89dd95b61aaf56ef.png
КАКОГО ХРЕНА? Почему в конце дописывается путь к файлу с русской локализацией?
Посмотрите, плиз, весь репозиторий. Чувствую, что я тот еще м@дак...
  • Вопрос задан
  • 407 просмотров
Решения вопроса 1
GavriKos
@GavriKos
Символ окончания строки случайно не забыли?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
фиг его знает, есть предположение, в main.c

setlocale(LC_ALL, "");

#ifdef PACKAGE_LOCALE_DIR
bindtextdomain(PACKAGE_NAME, PACKAGE_LOCALE_DIR);
#else
#error Please use flag -DPACKAGE_LOCALE_DIR="locale"!
#endif

textdomain(PACKAGE_NAME);

что то из этого выдает в stdout лишний текст путь до локализации, но он закеширован, кеши сбрасываются по завершению программы
Ответ написан
15432
@15432
Системный программист ^_^
Переполнение происходит, scanf читает всю строку до символа перевода строки, но буфер всего 4 байта, и происходит перезапись данных, что за буфером. Видимо дальше хранится имя файла, которое и выводится. Необходимо использовать безопасный scanf (в винде это scanf_s, в линуксе не знаю).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы