Вы путаете себя - программа предназначена для того, чтобы запутать.
У вас есть pch
и pch2
, указывающие на одну и ту же строку ввода - input
.Вы звоните strpbrk()
, чтобы найти одного из операторов, сохраняя эту позицию в pch2
.Затем вы вызываете strtok()
для pch
, и он находит только что найденный символ strpbrk()
и записывает NUL '\0'
поверх него.Итак, похоже, что pch2
указывает на NUL в конце строки.В теле цикла вы затем соединяете пустую строку, на которую указывает pch2
, с вашим целевым списком операторов.
Лично я избегаю использования strtok()
именно потому, что он искажает входную строку.Если вы собираетесь его использовать, вам, вероятно, придется работать с дубликатом строки, потому что strtok()
записывает в него NUL-байты.
Ваш диагностический вывод в конце должен показывать, что первый разделиз ввода - до первого оператора - только.
Остерегайтесь приведения приведений к функциям стандартной библиотеки или «не работают» компиляторы.Это знак Tyro;99,9999% времени, это ошибка пользователя, а не системная ошибка.В тех очень, очень, очень редких случаях, когда вы правы (ооо, смотрите - я только что выиграл свой третий многомиллионный лотерейный приз; это более вероятно, даже если я не покупаю лотерейные билеты), такВы описываете проблему иначе.Вы описываете проблему как одно из крайнего удивления;вы документируете рабочие тестовые случаи;затем вы объясняете, как должен работать найденный вами крайний случай, и результат - и вы до сих пор не уверены, является ли это ошибкой в вашем коде или в системе.
Как другие диагностировали,вы не инициализируете operadores
пустой строкой, поэтому конкатенация к ней приводит к неопределенному поведению.
На самом деле нет необходимости выделять 100-байтовые строки:
char input[100]; // Cleaner, simpler, more reliable