Консультация № 63978
24.11.2006, 10:29
0.00 руб.
0 1 1
Добрый день.
Что то туплю, помогите.
VS2005.

Приложение:
#include "stdafx.h"#include<iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ char *str = "[2*(8-7)+5]-8"; int ob=3; int cb=7; char *exp = new char[cb-ob-1]; cout<<"strlen(exp) = "<<strlen(exp)<<endl; for(int j=0,i= ob+1;i<cb;i++) exp[j++]=str[i]; cout<<"\n1.str = "<<str<<endl; cout<<" exp = "<<exp<<endl;// надо получить: 8-7 cout<<" cb = "<<cb<<endl; cout<<"strlen(exp) = "<<strlen(exp)<<endl;// 7 получается cout<<" (cb-ob-1)= "<<cb-ob-1<<endl;// 3 -как надо return 0;}

Обсуждение

Неизвестный
24.11.2006, 10:44
общий
это ответ
Здравствуйте, Kos!
Здесь ты выделяшь память под строку char *exp = new char[cb-ob-1];
Выделяешь ровно на три символа, но где четвертый?? Для символа конца строки ‘\0‘.
Ведь без него функция strlen() и не будет работать корректно, т.к. длину строки она закачивает считать когда встречает это символ. Попробуй сделать примерно так.

char *exp = new char[cb-ob-1];
exp[cb-ob-1] = ‘\0‘;

Должно работать...
Форма ответа