Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2012, 17:41   #1
Игорь_С
Пользователь
 
Аватар для Игорь_С
 
Регистрация: 14.10.2012
Сообщений: 39
По умолчанию строки

Написал простенькую программку и не пойму почему выдаёт длину всегда равную 3???
Код:
include <iostream>
#include <string.h>

using namespace std;
int size=256;
char fun();
int fun_1(char*);
int fun_2(char*);

char fun()
{
    cout << "Enter text \n";
    char *mas=new char[size];
    cin.getline(mas, size);
    return mas[size];
}
int fun_1(char *mas)
{

    size=strlen(mas);


    return size;

}

int main()
{
    char mas[size];

    fun();
    cout << fun_1(mas);
    return 0;
}

Последний раз редактировалось Stilet; 15.10.2012 в 17:49.
Игорь_С вне форума Ответить с цитированием
Старый 15.10.2012, 17:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Игорь_С
Ану проверь отладчиком после getline ставится символ с нулевым кодом в конце введенной строки?

P.S. Ты в фуцнкции наполняешь массив, но не возвращаешь его:
Цитата:
char mas[size];

fun();
cout << fun_1(mas);
fun() ничего не возвращает.
И потом ты массив динамический неверно возвращаешь
Вот как должна быть описана функция:
Код:
char *fun()
{
    cout << "Enter text \n";
    char *mas=new char[size];
    cin.getline(mas, size);
    return mas;
}
I'm learning to live...

Последний раз редактировалось Stilet; 15.10.2012 в 17:58.
Stilet вне форума Ответить с цитированием
Старый 16.10.2012, 06:14   #3
Игорь_С
Пользователь
 
Аватар для Игорь_С
 
Регистрация: 14.10.2012
Сообщений: 39
По умолчанию

исправил, но всё равно выдаёт 3
P.S как код в тег загнать?
Игорь_С вне форума Ответить с цитированием
Старый 16.10.2012, 07:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
исправил,
Ну так показывай )
Цитата:
как код в тег загнать?
На панели инструментов ввода поста есть кнопка # - это спецтег для кода. Выделяешь написанный код в поле редактирования и жмешь ее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2012, 13:05   #5
Игорь_С
Пользователь
 
Аватар для Игорь_С
 
Регистрация: 14.10.2012
Сообщений: 39
По умолчанию

Код:
#include <iostream>
#include <string.h>

using namespace std;
int size=256;
char *fun();
int fun_1(char*);
int fun_2(char*);

char *fun()
{
    cout << "Enter text \n";
    char *mas=new char[size];
    cin.getline(mas, size);
    return mas;
}
int fun_1(char *mas)
{
    size=strlen(mas);



    return size;

}
int main()
{
    char mas[size];


    fun();
    cout << fun_1(mas);
    
    return 0;
}
вот=))
Игорь_С вне форума Ответить с цитированием
Старый 16.10.2012, 13:22   #6
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Тогда уже,
Код:
 cout << fun_1(fun());
если я правильно понял.

Вообще, так немного аккуратнее:
Код:
mas = fun();
cout << fun_1(mas);
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 16.10.2012, 13:40   #7
Игорь_С
Пользователь
 
Аватар для Игорь_С
 
Регистрация: 14.10.2012
Сообщений: 39
По умолчанию

спасибо, всё работает но не пойму почему если функция из функции работает а как было раньше нет?
Игорь_С вне форума Ответить с цитированием
Старый 16.10.2012, 13:46   #8
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Прочитай про пространства имён и область видимости переменной.

Переменная mas здесь
Код:
int main()
{
    char mas[size];
    ...
}
и здесь

Код:
char fun()
{
    ...
    char *mas=new char[size];
    ...
}
это два ничем не связанных объекта.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10