|
|
|
| При считывании строки из файла столкнулся со след. проблемой:
#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
Подскажите, в чем проблема? | |
|
|
|
|
|
|
|
для: Sidius
(26.11.2007 в 01:31)
| | а ты под свою лехему память заводить не пробовал?
char* leksema=new char[256];
|
| |
|
|
|
|
|
|
|
для: alex19921992
(26.11.2007 в 03:08)
| | Пробовал, но ситуацию это не меняет к сожалению | |
|
|
|
|
|
|
|
для: 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);
} | |
|
|
|
|
|
|
|
для: 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);
>}
А во вторым способом обнулилось. Можите рассказать, в чем фишка то? | |
|
|
|
|
|
|
|
для: Sidius
(26.11.2007 в 06:02)
| | потому что в конце строки должен ноль стоять. когда выводишь строку, он фактически выводит блок памяти пока не встретит ноль.
функция стркат дописывает в конец строки нужную строку и правильно сдвигает ноль | |
|
|
|