Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Помогите разобраться


Автор: Sollo 13.2.2006, 16:59
Есть вот такой вот код
Код

bool res = false;
        char buf[MAXLINE];
        char  b_site[40],b_place[40],*b_path,prototype[160];               
        b_path = new char [160];
        recv(handle,buf,MAXLINE,0);
        printf("\n Hello \n");
                             strcpy(b_site,strtok(buf,":"));
                             strcpy(b_place,strtok(NULL,":"));
        strcat(b_path,b_site);
        strcat(b_path,"/");
        strcat(b_path,b_place);
        strcat(prototype,"/");
        strcat(prototype,b_place);
        strcat(prototype,".ini");
        printf(b_path);
        printf("/===============/");
        printf(prototype);


И при выполнении вот такой вот результат

hellon/hanny
"(,Л©©xy"(8К©©ш (xy"(pdК©©жз (/===============//hanny
"(,Л©©xy"(8К©©ш (xy"(pdК©©жз (.ini

а всё произходит очень просто покрайней мере на мой взгляд. У меня задание получить строку разбить её и составить из неё путь вида b_site+'/'+b_place+'/'+b_place+'.ini'. При етом в сокет я передаю строчку hellon:hanny и я не могу понять от куда у меня в буфере нарисовуються вот ети символы "(,Л©©xy"(8К©©ш (xy"(pdК©©жз и как я могу от них отделаться помогите пожалуйста уже хрен знает сколько мучаюсь....

Автор: Бонифаций 13.2.2006, 17:06
инициализация b_path?

Автор: Adil' 13.2.2006, 17:30
1. применение strcat к неинициализированной (хотя бы одним 0-терминатором в начале) строке чревато. Ведь strcat бежит по строке и
ищет ее конец, а что при prototype[160];, что при b_path = new char [160]; в строке будет сидеть мусор. Или написать
*prototype=*b_path = 0; или при первых копированиях использовать strcpy.
2. Лучше проверять, что возвращает strtok - я не уверен, что второй вызов strtok(NULL,":") для строки " hellon:hanny" не вернёт NULL.

Автор: Sollo 15.2.2006, 13:08
Всем ребята спасибо я нашёл другое решение етой проблемы ..... я просто сделал таким образом
Код

size_buf = recv(handle,buf,MAXLINE,0);
         char res1[size_buf+1]; 
         for (i = 0;i < size_buf;i++) {
              res1[i] = buf[i];
             }       


и уже в масиве res1 небыло никакого мусора .... =)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)