![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fixin |
|
||||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
Измени код
Добавлено @ 20:14 И посмотри, что напишет. |
||||
|
|||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Ладно, сейчас попробую.
|
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Я для верности вставил имя файла в кавычки, так он нарисовал в этих кавычках квадратик, а затем несколько пробелов, общая длина которых равна длине имени файла! А вы сами попробуйте! Вот мой полный код:
Имя файла у меня "text.txt". Я его изначально создал в директории программы и попытался открыть. Ноль внимания (в смысле, ошибка). И еще вопрос. Почему, когда я переменную file_name заранее переделал в строковый тип вот так:
Чтобы потом не забывать это писать и не ошибаться, компайлер снова заорал, что в fopen не может быть типа char (!)? |
||||
|
|||||
| Void |
|
||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
sim7
Давайте уже определяться, что мы используем - сишные строки и stdio или std::string и iostreams. Потому что одно с другим плохо сочетается.
Вот за это люди и не любят stdio. Компилятор молча пропустил грубейшую ошибку: если в строке формата стоит %s, то в качестве параметра должен быть char*, ссылающийся на буфер достаточной длины. А мы что передали? Правильно, указатель на объект типа std::string. Что у нас получилось? Правильно, undefined behaviour и вообще повезло, что все сразу не упало.
Это попытка избежать варнинга? Неудачная, потому что в данном случае надо именно:
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||
|
|||||||
| mr.Anderson |
|
||||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
А как с ними делать надо? Перепишите мой код по новой...
А как же надо? Ведь имя файла не может быть типа char, он же хранит 1 символ...
Вот это действительно моя ошибка. В общем, перепишите мой код со string. А тоя так до след. года биться буду. |
||||||
|
|||||||
| mr.Anderson |
|
||||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
УРА!!!
Однако, осталась проблема. В файле text.txt, который я открываю через эту программу, находится текст:
Но программа, выводя содержимое файла через инструкцию else в функции перестройки файла в моем коде, выводит какие-то цифры:
Почему так и как это исправить? |
||||||
|
|||||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Люди! Я вопрос задал! Почему читается не текст, а цифры (см. пред. пост)?! Помогите!
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
sim7
Очень просто - x имеет тип int - целое число. И в cout выводится в соответствующем виде. Можно сделать вот так: cout << char(x); Или вовсе перейти полностью на потоки:
std::string умеет сам выводиться в поток, поэтому писать cout << s.c_str() бессмысленно. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Спасибо, разобрался. Действительно, дело было в типе. Я объявил ее как int, потому что в учебнике было написано:
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
sim7
В учебнике написано правильно. Но это расчитано на модель ввода/вывода stdio, где типы всегда указываются явно. А здесь опять пошла мешанина из потоков и stdio. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Ну, надо же. А я уж было собрался в учебнике править...
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |