Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Функция возращает неправильную строку.


Автор: 444ert666 4.7.2008, 09:07
Здравствуйте!
Только вот начал учить С++, при чем сразу же зателось че-нить написать. Первая же проблема, ввела в ступор, короче код:
Код

#include <stdio.h>
#include <string.h>






char * parseUrl(char url[])
{
    int len=strlen(url);
    int i, count, k;
    bool start=false;
    count=0;
    k=0;
    char ret[len+1];
    char tmp;
    for(i=0;i<=len;i++) ret[i]=NULL;
    for(i=0;i<len;i++)
    {
      if(start)
      {
        sprintf(&ret[k],"%c",url[i]);
       k++;
        if(url[i+1]!=47) start=true;
      }
      else
      if(url[i]==47)
      {
         if(start) break; 
        count++;
        if(count==2) start=true;
      }
    }
            ret[k]=NULL;
    //printf("%d\n",strlen(ret));
    //printf(ret);
    return ret;
}

int main(int argc, char* argv [ ] )
{
    char *res;
    res=parseUrl("http://split.work.ru/as1/as2/as3/as4");
    printf("%s",res);
    return 0;
}

В итоге в консоль выводятся иероглифы:((((((
если же расскомментирую printf(ret); в функции parseUrl, то хост выводится нормально, но значение влзращается косое, или я его неправильно получаю:(((((( 

помогите пожалуйста, пол вчерашнего дня мучился, ничего не понимаю:(

Автор: Sartorius 4.7.2008, 09:16
 Локальные переменные храняться на стеке, при выходе из функции ее стековый фрейм уничтожается (вместе с твоей строкой) так что выделяй память на куче или заведи статическую переменную

Автор: Maka6er 4.7.2008, 09:30
Строчку: 
Код

char ret[len+1];
 замените на: 
Код

char *ret = (char *) malloc(len+1);
 и в инклуды: stdlib.h

Автор: 444ert666 4.7.2008, 09:34
Maka6er, 
АААА, спасибо огрмное, заработалоsmile)))))
Я по своей наивности, прдполагал, что выделение памяти, происходит при объявлении переменной. судя по всему, я заблуждалсяsmile))
Огромное спасибо!

Добавлено через 1 минуту и 28 секунд
Sartorius, 
получается, если я выделю память malloc, и суну туда строку, то эта память не затрется при выходе из функции?

Автор: TanK1sT 4.7.2008, 12:35
Цитата

получается, если я выделю память malloc, и суну туда строку, то эта память не затрется при выходе из функции? 

Такая память освобождается при вызове функции free.

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