Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
1

Возвращение char[]

02.10.2014, 16:22. Показов 819. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, всем. Столкнулся с небольшой проблемой: нужно вывести на экран массив char[], а выводится только 0-ой элемент...т.е. передается где-то только указатель. Подскажите, где, плиз. key - динамический.
.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "MainClass.h"
#include <conio.h>
#include <iostream>
 
MainClass::MainClass(){
    key = new char[20];
}
MainClass::~MainClass(){
    delete[] key;
}
 
char* MainClass::getKey(){
    return key;
}
void MainClass::setKey(char key[]){
    this->key = key;
}
 
void MainClass::main(){
        MainClass object;
        char* key = new char[20];
        std::cout<< "Key? ";
    std::cin >> key;
    object.setKey(key);
    std::cout <<object.getKey();
}
.h
C++
1
2
3
4
5
6
7
8
9
10
11
class MainClass{       
    char* key;
public:
    MainClass();
    ~MainClass();
 
    char* getKey();
    void setKey(char key[]);
 
    void main();
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2014, 16:22
Ответы с готовыми решениями:

Char unsigned char signed char длинна Кааак
Здравствуйте. char l = {0,0}; l = 0xff; Почему, меня, компилятор не посылает куда...

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что &quot;char *concat(char *,...)&quot;: невозможно...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;,...

Как присвоить к новой char переменной другую char переменную с указателем
Как присвоить к новой char переменной другую char переменную с указателем #include&lt;iostream&gt;...

11
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 17:12 2
Цитата Сообщение от lion_wine Посмотреть сообщение
нужно вывести на экран массив char[], а выводится только 0-ой элемент...т.е. передается где-то только указатель.
Для вывода массива char и нужен указатель.
Где, собственно, вывод в коде?

Добавлено через 1 минуту
Вот это?
C++
1
std::cout <<object.getKey();
0
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
02.10.2014, 17:15  [ТС] 3
да это, мб я сет неправильно задаю?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 17:20 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <conio.h>
#include <iostream>
 
class MainClass{       
    char* key;
public:
    MainClass();
    ~MainClass();
 
    char* getKey();
    void setKey(char key[]);
 
    void main();
}; 
 
MainClass::MainClass(){
    key = new char[20];
}
MainClass::~MainClass(){
    delete[] key;
}
 
char* MainClass::getKey(){
    return key;
}
void MainClass::setKey(char key[]){
    this->key = key;
}
 
void MainClass::main(){
        MainClass object;
        char* key = new char[20];
        std::cout<< "Key? ";
    std::cin >> key;
    object.setKey(key);
    std::cout << object.getKey();
}
 
int main()
{
    MainClass obj;
    obj.main();
    
    system("pause");
    return 0;
}
Утечка памяти только. Зачем этот метод main()?
Миниатюры
Возвращение char[]  
0
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
02.10.2014, 17:28  [ТС] 5
Не понял, что вы поменяли( а main() вынес т.к. только часть программы со множеством подобных классов
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 17:34 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <conio.h>
#include <iostream>
 
class MainClass{       
    char* key;
public:
    MainClass();
    ~MainClass();
 
    char* getKey();
    void setKey(char key[]);
 
    void input();
}; 
 
MainClass::MainClass(){
    key = new char[20];
}
MainClass::~MainClass(){
    delete[] key;
}
 
char* MainClass::getKey(){
    return key;
}
void MainClass::setKey(char key[]){
    this->key = key;
}
 
void MainClass::input(){
    std::cout<< "Key? ";
    std::cin >> key;
}
 
int main()
{
    MainClass obj;
    obj.input();
    cout << obj.getKey() << endl;
   
    system("pause");
    return 0;
}
0
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
02.10.2014, 17:37  [ТС] 7
да у вас все работает, странно. Собственно вся программа. Делает список
MainClass.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "MainClass.h"
#include <conio.h>
#include <iostream>
 
MainClass* MainClass::current = NULL;   
MainClass* MainClass::head = NULL;
MainClass* MainClass::prev = NULL;
MainClass* MainClass::tail = NULL;
 
MainClass::MainClass(){
    key = new char[20];
}
MainClass::~MainClass(){
    delete[] key;
}
 
int MainClass::getNumber(){
    return number;
}
void MainClass::setNumber(int number){
    this->number=number;
}
char* MainClass::getKey(){
    return key;
}
void MainClass::setKey(char key[]){
    this->key = key;
}
MainClass* MainClass::getNext(){
    return next;
}
void MainClass::setNext(MainClass* next){
    this->next = next;
}
 
void MainClass::menu(){
        std::cout << "      MENU";
        std::cout << "\n\n1   - Show list";
        std::cout << "\n2   - Search by number";
        std::cout << "\n3   - 1";
        std::cout << "\n4   - 1";
        std::cout << "\nESC - Exit";
}
void MainClass::main(){
    createList();
    char key = '0';
    while (key != 27)
    {
        system("cls");
        menu();
        key = _getch();
 
        switch (key)
        {
        case '1':
            current = head;
            std::cout << "\n\nKey:\tNumber:";
            while (!current==NULL)
            {
                std::cout <<"\n"<<current->getKey() << "\t";
                std::cout << current->getNumber();
                current = current->getNext();
            }
            _getch();
            break;
        case '2':
            int searchNumber;
            std::cout << "\n\nNumber is? ";
            std::cin >> searchNumber;
            std::cout << "\nKey:\tNumber:\n";
 
            current = head;
            while (!current == NULL)
            {
                if (current->getNumber() == searchNumber){
                    std::cout << current->getKey() << "\t";
                    std::cout << current->getNumber();
                }
                current = current->getNext();
            }
            _getch();
            break;
        case '3':
 
            current = head;
            while (!current == NULL)
            {
                if (current->getNumber() == searchNumber){
                    std::cout << current->getKey() << "\t";
                    std::cout << current->getNumber();
                }
                current = current->getNext();
            }
            _getch();
            break;
        }
    }
}
void MainClass::createList(){
    char* key = new char[20];
    int counter = 0;
    bool first = true;
    for (;;){
        std::cout << "Key is? ";
        std::cin >> key;
 
        if (!strcmp(key, "q")){
            break;
        }
        current = new MainClass;
        current->setKey(key);
        current->setNumber(counter);
        if (first == true)
        {
            head = current;
        }
        if (prev != NULL)
            prev->setNext(current);
        prev = current;
 
        first = false;
        counter++;
    }
}
MainClass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class MainClass{        //класс - элемент списка
    int number;
    char* key;
    MainClass* next;
public:
    static MainClass* current;
    static MainClass* head;
    static MainClass* tail;
    static MainClass* prev;
 
    MainClass();
    ~MainClass();
    int getNumber();
    void setNumber(int number);
    char* getKey();
    void setKey(char key[]);
    MainClass* getNext();
    void setNext(MainClass* next);
 
    void menu();
    void main();
    void createList(/*int n*/);
};
starter.cpp
C++
1
2
3
4
5
6
7
8
#include "MainClass.h"
#include <conio.h>
#include <iostream>
void main()
{
    MainClass* mainClassObject = new MainClass;
    mainClassObject->main();
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 17:39 8
Цитата Сообщение от lion_wine Посмотреть сообщение
да у вас все работает, странно
Покажите, как класс используете, а то не понятно: что и где не выводится.
0
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
02.10.2014, 17:44  [ТС] 9
А все понял с strcmp- левая ошибка
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 17:48 10
Цитата Сообщение от lion_wine Посмотреть сообщение
Собственно вся программа. Делает список
Очень похоже на код из первого поста...
0
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
02.10.2014, 17:53  [ТС] 11
это я и был) спасибо
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 18:10 12
Цитата Сообщение от lion_wine Посмотреть сообщение
это я и был) спасибо
Похоже, в смысле: мало что похоже.
0
02.10.2014, 18:10
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2014, 18:10
Помогаю со студенческими работами здесь

Однонаправленные списки. [Error] incompatible types in assignment of 'char*' to 'char [128]'
Доброго времени суток. Начал учить однонаправленные списки, но столкнулся с проблемой: ...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot...

Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR
Проблемные вопросы отражены на скрине Программа написана к заданию: 1. Разработать прикладной...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru