Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция возращает неправильную строку. 
:(
    Опции темы
444ert666
Дата 4.7.2008, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 9.5.2006

Репутация: нет
Всего: нет



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

#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, то хост выводится нормально, но значение влзращается косое, или я его неправильно получаю:(((((( 

помогите пожалуйста, пол вчерашнего дня мучился, ничего не понимаю:(
PM MAIL   Вверх
Sartorius
Дата 4.7.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 2
Всего: 37



 Локальные переменные храняться на стеке, при выходе из функции ее стековый фрейм уничтожается (вместе с твоей строкой) так что выделяй память на куче или заведи статическую переменную
PM MAIL ICQ   Вверх
Maka6er
Дата 4.7.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: 1
Всего: 3



Строчку: 
Код

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

char *ret = (char *) malloc(len+1);
 и в инклуды: stdlib.h
PM MAIL   Вверх
444ert666
Дата 4.7.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 9.5.2006

Репутация: нет
Всего: нет



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

Добавлено через 1 минуту и 28 секунд
Sartorius
получается, если я выделю память malloc, и суну туда строку, то эта память не затрется при выходе из функции?
PM MAIL   Вверх
TanK1sT
Дата 4.7.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.5.2008

Репутация: нет
Всего: 1



Цитата

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

Такая память освобождается при вызове функции free.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.