Форум: Форум C++Разное
Новые темы: 00
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема считывания из файла
 
 автор: Sidius   (26.11.2007 в 01:31)   письмо автору
 
 

При считывании строки из файла столкнулся со след. проблемой:



#include <iostream>
#include <fstream>

using namespace std;

int main()
{

    char file_name[20];
    cin >> file_name;


    ifstream fin(file_name);
    char ch;
    char* leksema;
    int a;
    int i = 0;


    while (fin.get(ch)) {
        a = ch;
        if (a==32) {
            cout << "NEW LEKSEMA: " << leksema << endl;
            i = 0;
            strcpy(leksema,"");
            cout << "o4istka LeksembI " << strlen(leksema) << endl;
        } else {
            leksema[i]=ch;
            i++;
        }

    }

    fin.close();

return 0;
}


Не обнуляется лексема. То есть, если скажем в файле есть " ABCDE 123 ", то программа выведет:
ABCDE
123DE

Подскажите, в чем проблема?

  Ответить  
 
 автор: alex19921992   (26.11.2007 в 03:08)   письмо автору
 
   для: Sidius   (26.11.2007 в 01:31)
 

а ты под свою лехему память заводить не пробовал?

char* leksema=new char[256];

  Ответить  
 
 автор: Sidius   (26.11.2007 в 05:14)   письмо автору
 
   для: alex19921992   (26.11.2007 в 03:08)
 

Пробовал, но ситуацию это не меняет к сожалению

  Ответить  
 
 автор: alex19921992   (26.11.2007 в 05:52)   письмо автору
 
   для: Sidius   (26.11.2007 в 05:14)
 

попробуй добавлять в конец лексемы символ '\0' то есть сразу как считал, добавить ноль

еще:

else {
leksema[i]=ch;
i++;
}
неверно!
делай так:
else {
char s1[2];s1[0]=ch;s1[1]=0;
strcat(leksema,s1);
}

  Ответить  
 
 автор: Sidius   (26.11.2007 в 06:02)   письмо автору
 
   для: alex19921992   (26.11.2007 в 05:52)
 

>попробуй добавлять в конец лексемы символ "\0"
Я даже так пробовал обнулять:

for (i = 0 ;i < strlen(leksema); i++) {
                leksema[i] = '\0';
}

Все равно не обнуляется.

>неверно!
>делай так:
>else {
>char s1[2];s1[0]=ch;s1[1]=0;
>strcat(leksema,s1);
>}

А во вторым способом обнулилось. Можите рассказать, в чем фишка то?

  Ответить  
 
 автор: alex19921992   (26.11.2007 в 20:50)   письмо автору
 
   для: Sidius   (26.11.2007 в 06:02)
 

потому что в конце строки должен ноль стоять. когда выводишь строку, он фактически выводит блок памяти пока не встретит ноль.
функция стркат дописывает в конец строки нужную строку и правильно сдвигает ноль

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования