Как передать строку в стиле cin'd c функции?

0

Я могу назначить переменную c-style переменной и передать ее функции, и я могу cin/cout строку c-style, но я не могу сгенерировать строку c-style, а затем передать ее функции. Как мне это сделать?

#include <iostream>
#include <string.h>

class SzString // edit 2: changed to Upper Camel for class name (Thanks Rabbiya Shahid)
{
    int m_length;
    char* m_szString;

public:
    void SetString(char* szString) // b) line on which program crashes after call from 'line a'
    {
        m_szString = szString;
        m_length = strlen(szString);
    }

    char* GetString()
    {
        return m_szString;
    }

};

SzString aString;

int main()
{
    using namespace std;
    cout << "Enter a string: ";
    char* szString; // line x (referenced following 'EDIT:')
    cin >> szString;
    aString.SetString(szString);  // line a

    cout << endl << aString.GetString();

    return 0;
}

РЕДАКТИРОВАТЬ:

Я исправил это двумя способами. Во-первых, я перешел на использование std :: string, как мне было сообщено, затем я вернулся к c-style Strings и исправил его вторым способом, изменив строку x: char* szString на char* szString = new char (на основе напоминания что char* szString не выделяет пространство).

Редактировать 3: (Спасибо πάντα ῥεῖ)

Добавлена следующая строка для строковой версии кода c-стиля после строки "a", чтобы предотвратить утечку памяти:

szString = 0;
delete[] szString;
  • 2
    Ваша жизнь станет в 100 раз лучше, если вы просто используете std::string .
  • 0
    Ооо Вы не можете просто извлечь char* , не выделяя места для char .
Показать ещё 3 комментария
Теги:

2 ответа

3
Лучший ответ

В main функции у вас есть определение

char* szString;

Это говорит компилятору, что szString является указателем на символы. Но вы не заставляете этот указатель на самом деле указывать на что-либо.

Поэтому, когда вы используете его для ввода ввода, операция ввода будет записывать вход в неизвестное местоположение. Это неопределенное поведение и приведет к тому, что ваша программа будет вести себя непредсказуемо, включая сбой.

Либо вы должны указать точку указателя на некоторое допустимое местоположение. Или даже лучше, не используйте указатели для строк, используйте std::string.

3
char* szString;
cin >> szString;

Этот код не делает то, что вы можете себе представить! Чтобы ввести строку из использования cin:

std::string s;
cin >> s;

Измените дальнейшие вхождения char* в std::string, std::string& соответственно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню