Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Крякозябры в конце вывода :( - C++

22.12.2012, 20:18. Просмотров 310. Ответов 6
Метки нет (Все метки)

Как от них избавиться, вот мой код:
C++
#include <stdio.h>
 
//====================================
// Name: getstring
// Desc: по идее должна получать
//       текст из файла и записывать
//       его в массив
//====================================
char *getstring(const char *name)
{
    char c;
    char s[1024];
    int  n = 0;
    int  i = 0;
    FILE *file;
    
    // узнаю кол-во символов (n) в файле
    file = fopen(name, "r");
 
    while(c != EOF)
    {
        if(c != EOF)
        {
            c = fgetc(file);
            n += 1;
        }
    }
    fclose(file);
 
    // создаю массив состоящий из n символов
    char x[n];
 
    // переписываю значения n символов в созданный массив x
    file = fopen(name, "r");
 
    for (i = 0; i < n; i ++)
        x[i] = fgetc(file);
 
    fclose(file);
 
    return x;
}
 
//====================================
// Name: main
// Desc: главная функция
//====================================
int main()
{
    const char *str = getstring("vs.txt");
 
    printf("%s", str); // пишет крякозябры в конце вывода:(
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 20:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Крякозябры в конце вывода :( (C++):

Выводятся крякозябры в консоли - C++
Подскажите, добрые люди, не могу сам понять в чем проблема? class String { private: char* _string;

Крякозябры при заполнении структуры - C++
while (true) { cout &lt;&lt; &quot;Меню: &quot; &lt;&lt; endl &lt;&lt; &quot;1. Вывести данные&quot; &lt;&lt; endl &lt;&lt; &quot;2. Добавить данные&quot; &lt;&lt; endl &lt;&lt; &quot;3. Упорядочить данные&quot; &lt;&lt;...

Чем сконвертировать в русский язык такие крякозябры? - C++
Чем сконвертировать в русский язык такие крякозябры? OemToChar не подходит. Я мог бы разные способы перебрать, но кроме OemToChar и...

Крякозябры в выводе ошибок компилятора Visual Studio 15 - C++
Раньше все было нормально именно в этой версии Студии, но не понятно после чего стало выдавать некоторые ошибки нормально, а некоторые вот...

При записи символов массива в txt в последнем отображаются крякозябры - C++
Разбирал пример как передать из массива в документ txt. Так вот вместо цифр выводятся непонятные кракозябры. Подскажите, как исправить... ...

Перегрузка оператора вывода в С++ (для вывода данных вектора) - C++
Как правильно перегрузить оператор вывода для вектора чтобы он выводил все данные из вектора ? Для этого класса есил можно помогите. ...

6
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.12.2012, 20:24 #2
массив х уничтожается после выхода из функции
1
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,395
Завершенные тесты: 1
22.12.2012, 20:29 #3
В функции должно быть
C++
1
2
3
4
5
  char x=new char[n+1];
    file = fopen(name, "rt");
    for (i = 0; i < n; i ++)
        x[i] = fgetc(file);
    x[i]=0;  // обязательно записываем конец строки (число ноль)!!!!!!!!!!!!!!!!!!!!!!!
1
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
22.12.2012, 20:37 #4
1.
Цитата Сообщение от Jupiter Посмотреть сообщение
массив х уничтожается после выхода из функции
2. Он не то, чтобы уничтожается, просто память, которую он занимал, считается свободной, но по счастливой случайности она не затирается, поэтому твой код все же что-то выводит.
Цитата Сообщение от programina Посмотреть сообщение
Крякозябры в конце вывода
вывод продолжается до тех пор, пока не будет встречен символ '\0', а т.к. из файла он не читается и ты руками его в конец массива не дописываешь, поэтому выводится еще что-то "левое" и где-то потом (опять же случайно) встречается символ '\0' и выводе прекращается.

3. Это не компилируемый код (либо это С99), хотя MinGW например имеет экстеншн, который компилирует такие вещи
C++
1
char x[n];
где n не константа.

Добавлено через 25 секунд
блин, опоздал.
2
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.12.2012, 20:45  [ТС] #5
Спасибо всем большое
0
Jupiter
22.12.2012, 21:33
  #6

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
2. Он не то, чтобы уничтожается, просто память, которую он занимал, считается свободной, но по счастливой случайности она не затирается, поэтому твой код все же что-то выводит.
это и так понятно тому кто знаком с ассемблером, а тому кто не знаком - знать не обязательно

1
Kastaneda
22.12.2012, 21:37     Крякозябры в конце вывода :(
  #7

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
это и так понятно тому кто знаком с ассемблером
ну я просто пытался объяснить ТС'у почему содержимое файла все же выводится на экран.

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2012, 21:37
Привет! Вот еще темы с ответами:

Кодировка: как получаются всякие квадратики, нолики и "крякозябры" в файлах? - C++
Я не смог найти подходящий раздел, где могу задать этот вопрос. Как получаются всякие квадратики, нолики и &quot;крякозябры&quot; в файлах,...

Написать программу, которая должна включать функции для: - вывода шапки таблицы; - вывода данных одной строки - C++
Написать программу, которая должна включать функции для: - вывода шапки таблицы; - вывода данных одной строки таблицы; - ввода и...

Для вывода матрицы на экран использовать рекурсивную функцию вывода одной строки матрицы - C++
Рекурсивная функция в С++. срочно! ДЛЯ вывода матрицы на экран построчно использовать РЕКУРСИВНУЮ функцию вывода на экран одномерного...

Что за ошибка в конце? - C++
#include &lt;windows.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;iomanip&gt; using namespace std; int main() ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.12.2012, 21:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru