Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
1

Когда считываю информацию с файла, то выводит в конце непонятные символы

24.05.2017, 14:55. Показов 5335. Ответов 15
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string.h>
#include <fstream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    char str[150];
    s = new char;
 
    ifstream file ("C:\\Users\\Tanya\\Desktop\\Prog.txt");
    file.read((char*) &str, sizeof(str));
 
    file.close();
    
    n = strlen(str);
 
    str[n] = '\0';
    cout << str << endl;
 
    getch();
    return 0;
}
Нужно просто прочесть из текстового файла, но проблема получается и отображает такое, как на картинке. Что нужно исправить, чтобы отображалась корректно? В текстовом файле нет таких символов.
Миниатюры
Когда считываю информацию с файла, то выводит в конце непонятные символы  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2017, 14:55
Ответы с готовыми решениями:

Чтения из файла - в конце появляются непонятные символы
Читаю из файла так char str; char ch; int i=0; while ( (ch = getc(fp)) != EOF ) {...

Бесконечный цикл, когда считываю с файла
Привет, я сделал функцию для чтения инфы с файла, вот она: std::string s; do { FTeam...

Сервер в конце сообщения добавляет непонятные мне символы
После того, как серверу были посланы заголовки от браузера, он, вернув функции recv() код...

Выводит непонятные символы
Нужно вывести слово в обратном порядке, но выводит типа этого

15
Рэмбо комнатный
102 / 102 / 99
Регистрация: 05.03.2017
Сообщений: 510
24.05.2017, 15:08 2
C++
1
2
3
4
    ifstream file ("C:\\Users\\Tanya\\Desktop\\Prog.txt");
    file.read((char*) &str, sizeof(str));
 
    file.close();
C++
1
2
3
4
    ifstream file ("C:\\Users\\Tanya\\Desktop\\Prog.txt");
    file >> str;
 
    file.close();
Добавлено через 1 минуту
C++
1
 file.read((char*) &str, sizeof(str));
это для чтения из бинарного файла
0
4 / 4 / 1
Регистрация: 19.04.2017
Сообщений: 35
24.05.2017, 15:57 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>
#include <locale>
 
int main()
{
   setlocale (0, "");
   FILE* file = fopen("C:\\Users\\Tanya\\Desktop\\Prog.txt" , "r");
   char str [150];
 
   if (file == NULL) perror("Ошибка! Файл не найден!");
   else
   {
     if ( fgets(str, 150, file) != NULL )
       puts(str);  
     fclose (file);
   }
   return 0;
}
0
nd2
3422 / 2802 / 1252
Регистрация: 29.01.2016
Сообщений: 9,426
24.05.2017, 17:51 4
Цитата Сообщение от tanyalev Посмотреть сообщение
Что нужно исправить, чтобы отображалась корректно?
strlen() тут нельзя применять: она использует '\0' для определения конца строки, а при бинарном чтении текста его не будет в массиве char, поэтому strlen() выдаст неверный результат.
0
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
24.05.2017, 17:58  [ТС] 5
C++
1
2
3
4
 ifstream file ("C:\\Users\\Tanya\\Desktop\\Prog.txt");
    file >> str;
 
    file.close();
Если сделать так, то отображается только текст до пробела.
0
nd2
3422 / 2802 / 1252
Регистрация: 29.01.2016
Сообщений: 9,426
24.05.2017, 17:59 6
Лучший ответ Сообщение было отмечено tanyalev как решение

Решение

Можно обойти так (предварительно заполнить массив нулями, и читать на единицу меньше):
C++
1
2
3
    char str[150] = {0};
    ifstream file ("C:\\Users\\Tanya\\Desktop\\Prog.txt");
    file.read((char*) &str, sizeof(str) - 1);
Тогда strlen() не нужен будет (имеется ввиду, для установки '\0').
1
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
24.05.2017, 17:59  [ТС] 7
Так и что применять вместо strlen()?
0
4 / 4 / 1
Регистрация: 19.04.2017
Сообщений: 35
24.05.2017, 18:01 8
А чем мой вариант не устраивает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>
#include <locale>
 
int main()
{
   setlocale (0, "");
   FILE* file = fopen("C:\\Users\\Tanya\\Desktop\\Prog.txt" , "r");
   char str [150];
 
   if (file == NULL) perror("Ошибка! Файл не найден!");
   else
   {
     if ( fgets(str, 150, file) != NULL )
       puts(str);  
     fclose (file);
   }
   return 0;
}
0
nd2
24.05.2017, 18:09
  #9

Не по теме:

Цитата Сообщение от platinum133 Посмотреть сообщение
А чем мой вариант не устраивает?
На Си написан, и нет бинарного чтения. :)

0
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
24.05.2017, 18:15  [ТС] 10
Спасибо, так работает.
0
4 / 4 / 1
Регистрация: 19.04.2017
Сообщений: 35
24.05.2017, 18:16 11
Ну а если так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
#include <fstream> 
#include <locale>
 
using namespace std;
 
int main()
{
   setlocale (0, "");
   char str[150];
   ifstream file("input.txt",ios::binary|ios::in);
   file.read((char*)&str,sizeof str); 
   file.close(); 
   cout<< str <<endl;
   system ("pause >> NUL");
   return 0;
}
0
nd2
3422 / 2802 / 1252
Регистрация: 29.01.2016
Сообщений: 9,426
24.05.2017, 19:03 12
Цитата Сообщение от platinum133 Посмотреть сообщение
Ну а если так.
Если так, то работа не будет ничем отличаться от работы кода ТС в первом посте.
0
4 / 4 / 1
Регистрация: 19.04.2017
Сообщений: 35
24.05.2017, 19:09 13
Только работать будет правильно.
Миниатюры
Когда считываю информацию с файла, то выводит в конце непонятные символы  
0
4 / 4 / 1
Регистрация: 19.04.2017
Сообщений: 35
24.05.2017, 19:10 14
1212
0
nd2
3422 / 2802 / 1252
Регистрация: 29.01.2016
Сообщений: 9,426
24.05.2017, 19:27 15
Цитата Сообщение от platinum133 Посмотреть сообщение
Только работать будет правильно.
С чего бы это? Если файл создан текстовым методом, то не будет. '\0' откуда там возьмётся?
В файле:
asdf werwr ssfsf dfss
Работа на скрине.
Миниатюры
Когда считываю информацию с файла, то выводит в конце непонятные символы  
0
nd2
3422 / 2802 / 1252
Регистрация: 29.01.2016
Сообщений: 9,426
24.05.2017, 19:28 16
Это называется UB. Предположу, что твой компилятор, при выделении памяти под массив char, обнуляет его.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2017, 19:28

В директории сохранения файла русские символы заменяются на непонятные символы
При сохранении файл через диалоговое окно русские символы заменяются на непонятные тем самым Window...

Почему, когда записываю в бинарный файл, в самом файле оказываются непонятные символы?
почему, когда записываю в бинарный файл, в самом файле непонятные символы? Или так должно быть?...

Непонятные символы после вывода из файла
Пытаюсь разобраться с работой с файлами, и наткнулся на такую проблему после сохранения в файл из...

При чтении файла получаются непонятные символы
Помогите пжалуста никак не могу разобраться с типизироваными файлами вот мой unit unit...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru