ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

20.04.2008, 14:42
|
|
Познающий
Регистрация: 29.02.2008
Сообщений: 66
Провел на форуме: 139469
Репутация:
33
|
|
помогите разобраться почему этот код работает не так как надо....
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
char **message_buf;
message_buf = new char*[argc];
for(int u=0;argv[u] != NULL;u++)message_buf[u]=new char[sizeof(argv[u])];
for(int i=0; argv[i] != NULL; i++)
{
strncpy(message_buf[i], argv[i], sizeof(argv[i]));
cout<<"w["<<i<<"]:"<<message_buf[i]<<endl;
}
for(int i=0;argv[i] != NULL;i++)delete [] message_buf[i];
delete []message_buf;
}
кампилю g++(linux)
Запускаю: ./client sdgdfg dfg dfg df gdfg
результат
w[0]:./cl
w[1]:sdgd
w[2]:dfg
w[3]:dfg
w[4]:df
w[5]:gdfg
как видете выводит только первые 4 символа... не предлогать переписать код, важно найти ошибку именно в этом.
Последний раз редактировалось ZipaCna; 20.04.2008 в 17:34..
|
|
|

20.04.2008, 16:14
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Может так?
Код:
strcpy(message_buf[i], argv[i]);

и вот этого, я думаю будет достаточно:
Код:
delete []message_buf;
Последний раз редактировалось criz; 20.04.2008 в 16:17..
|
|
|

20.04.2008, 16:38
|
|
Познающий
Регистрация: 29.02.2008
Сообщений: 66
Провел на форуме: 139469
Репутация:
33
|
|
Сообщение от criz
Может так?
Код:
strcpy(message_buf[i], argv[i]);

и вот этого, я думаю будет достаточно:
Код:
delete []message_buf;
criz, извени конечно, но ты не прав...
strcpy(message_buf[i], argv[i]) - это опасная конструкция и она подвержена переполнению, так как не проверяет входящую строку на длинну...так что надо юзать именно strncpy.
delete []message_buf; - одного этого не достаточно, надо очиститть память и для каждого элемента...
Последний раз редактировалось ZipaCna; 20.04.2008 в 16:42..
|
|
|

20.04.2008, 17:15
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
ясно 
Просто ты указываешь , а это 4 байта. Вот я и решил не ограничиваться 4мя байтами 
|
|
|

20.04.2008, 17:37
|
|
Познающий
Регистрация: 29.02.2008
Сообщений: 66
Провел на форуме: 139469
Репутация:
33
|
|
Сообщение от criz
ясно 
Просто ты указываешь , а это 4 байта. Вот я и решил не ограничиваться 4мя байтами 
кстате да спасибо , тут тоже ошибка надо было sizeof(argv[i])
но весь трабл не в этом ..... =((
при выделении памяти под элименты масива не зависимо от того что я передам в argv код
for(int u=0;argv[u] != NULL;u++)message_buf[u]=new char[sizeof(argv[u])];
выделяет по 4 байта.... попробуйте собрать этот исходник под виндой и скажите проблема такая же??
Последний раз редактировалось ZipaCna; 20.04.2008 в 17:40..
|
|
|

20.04.2008, 17:59
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
argv[i] - указатель. sizeof от указателя = 4. Юзай strlen().
|
|
|

20.04.2008, 20:01
|
|
Познающий
Регистрация: 29.02.2008
Сообщений: 66
Провел на форуме: 139469
Репутация:
33
|
|
Сообщение от Forcer
argv[i] - указатель. sizeof от указателя = 4. Юзай strlen().
Спасибо ошибку понял. Все работает.
|
|
|

21.04.2008, 01:01
|
|
Познающий
Регистрация: 25.10.2007
Сообщений: 69
Провел на форуме: 348179
Репутация:
52
|
|
Ребят помогите.
Нужен любой код бинарного дерева ( чтоб добавлять, удалять редактировать.) На С++.
ПРосто любой рабочий, обыскал моно сказать все и ни как если есть у кого вылоите плз.
|
|
|

21.04.2008, 01:40
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме: 4037638
Репутация:
1821
|
|
_http://forum.vingrad.ru/forum/s/34d46f3f9f3c02ea59529320070694a3/topic-99013/anchor-entry1469467/0.html
_http://programmersforum.ru/showthread.php?p=92241
_http://alglib.sources.ru/sorting/heapsort.php
_http://forum.codenet.ru/showthread.php?t=44506 (паскаль, на всякий случай)
|
|
|

21.04.2008, 01:56
|
|
Участник форума
Регистрация: 22.11.2007
Сообщений: 159
Провел на форуме: 732568
Репутация:
156
|
|
да set в STL используй!
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|