Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Я что, идиот ???

1.2K
25 октября 2002 года
толстый
5 / / 20.07.2000
Почему так работает,
void mystr2::copy(int from,int howmany,char* init,char* last){
int maxsize=-1;
if (last) maxsize=last-init;//на всякий случай проверка выхода за границы массива
int forcopy=((howmany>maxsize)&&(maxsize!=-1))?maxsize:howmany;
if (forcopy<=0) return;
int mylen=strlen(str);
if ((from>mylen)||(from<=0)) return ;
char * tmp=init;
for(int i=0;*(str+from+i-2)&&(i<forcopy);i++){
*(tmp+i)=*(str+from-1+i);
};
if (i==forcopy) *(tmp+i)=0;
}
а так нет
void mystr2::copy(int from,int howmany,char* init,char* last){
int maxsize=-1;
if (last) maxsize=last-init;//на всякий случай проверка выхода за границы массива
int forcopy=((howmany>maxsize)&&(maxsize!=-1))?maxsize:howmany;
if (forcopy<=0) return;
int mylen=strlen(str);
if ((from>mylen)||(from<=0)) return ;
char * tmp=init;
////
for(int i=0;*(tmp+i)=*(str+from-1+i)&&(i<forcopy);i++);
////Вместо подстроки возвращает "мусор"
if (i==forcopy) *(tmp+i)=0;
}
Проверял на BC++3.1 и MVC6
831
25 октября 2002 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by толстый
Почему так работает,
void mystr2::copy(int from,int howmany,char* init,char* last){
int maxsize=-1;
if (last) maxsize=last-init;//на всякий случай проверка выхода за границы массива
int forcopy=((howmany>maxsize)&&(maxsize!=-1))?maxsize:howmany;
if (forcopy<=0) return;
int mylen=strlen(str);
if ((from>mylen)||(from<=0)) return ;
char * tmp=init;
for(int i=0;*(str+from+i-2)&&(i<forcopy);i++){
*(tmp+i)=*(str+from-1+i);
};
if (i==forcopy) *(tmp+i)=0;
}
а так нет
void mystr2::copy(int from,int howmany,char* init,char* last){
int maxsize=-1;
if (last) maxsize=last-init;//на всякий случай проверка выхода за границы массива
int forcopy=((howmany>maxsize)&&(maxsize!=-1))?maxsize:howmany;
if (forcopy<=0) return;
int mylen=strlen(str);
if ((from>mylen)||(from<=0)) return ;
char * tmp=init;
////
for(int i=0;*(tmp+i)=*(str+from-1+i)&&(i<forcopy);i++);
////Вместо подстроки возвращает "мусор"
if (i==forcopy) *(tmp+i)=0;
}
Проверял на BC++3.1 и MVC6



Вверху ты в *(tmp+i) пишешь значение (str+from-1+i) а внизу - *(str+from-1+i)&&(i<forcopy) - я думаю, это совсем разные значения :)
попробуй нижний цикл переписать так:

for(int i=0,*(tmp+i)=*(str+from-1+i);*(tmp+i)&& i<forcopy);i++);

1.2K
26 октября 2002 года
толстый
5 / / 20.07.2000
Цитата:
Originally posted by S_T


Вверху ты в *(tmp+i) пишешь значение (str+from-1+i) а внизу - *(str+from-1+i)&&(i<forcopy) - я думаю, это совсем разные значения :)
попробуй нижний цикл переписать так:

for(int i=0,*(tmp+i)=*(str+from-1+i);*(tmp+i)&& i<forcopy);i++);



Вообще-то "&&" - это логическая операция, а не битовая. Так что и там и там присваивается одно и то же.

831
26 октября 2002 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by толстый


Вообще-то "&&" - это логическая операция, а не битовая. Так что и там и там присваивается одно и то же.


да это логическая операция, и ее результат либо 0 либо 1 (логическая ложь или истина). Вот если бы ты внимательно посмотрел на результат работы этой процедуры, то заметил бы, что в tmp у тебя хранятся единицы... То есть во втором случае, у тебя в tmp пишется результат этой логической операции. То что я предложил (я не проверял когда писал, но сейчас уже проверил) синтаксически не правильная конструкция. Но идея в ней верна. Так что я думаю, ты догадаешься, как это переделать :0)

3
28 октября 2002 года
Green
4.8K / / 20.01.2000
Форум вроде бы по программированию, а не по психиатрии... :D :D :D
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог