2017-01-17 4 views
0

Я хочу назначить целое число указателю char с помощью stringstream. Но я получаю ошибку при запуске этой программы в строке ss >> p. Пожалуйста, помогите мне здесь, я хочу, чтобы целое число сначала попало в буфер, и оно должно быть присвоено символу char *.Назначить целое число указателю на char, используя stringstream

#include <string>  // std::string 
#include <iostream>  // std::cout 
#include <sstream>  // std::stringstream 
using namespace std; 
int main() 
{ 
    stringstream ss; 
    int n=100; 
    char *p; 
    ss << n; 
    ss >> p; //not working 
    cout << ss; 
    return 0; 
} 
+2

У вас есть указатель, 'p', но где он указывает? –

+0

Возможный дубликат [Как помещать содержимое stringstream в тип символа вместо типа строки] (http://stackoverflow.com/questions/8765574/how-to-put-stringstream-contents-into-char-type-instead-string- type) –

ответ

1

Использование stringstream строка :: ул, чтобы получить C++, а затем использовать .c_str() на строке:

#include <string>  // std::string                                                  
#include <iostream>  // std::cout                                                   
#include <sstream>  // std::stringstream                                                 
using namespace std; 
int main() 
{ 
    stringstream ss; 
    int n = 100; 
    char* p; 
    ss << n; 

    string tmp = ss.str(); 
    p = const_cast<char*>(tmp.c_str()); 

    cout << "p: " << p << '\n'; 

    return 0; 
} 

Учтите, что указатель символ становится недействительным, как только строка выходит из объем. Если вам нужно какое-то поведение заводской функции, верните строку по значению, используйте strlcpy или, возможно, новый и shared_ptr.

+0

i did not get it.please коротко объясните мне –

+1

Это 'p' неверно, и ваша программа имеет неопределенное поведение. (И почему вы отбросили 'const'?) – molbdnilo

+0

@molbdnilo Обычно объявление указателя как const char * было бы лучше, я просто хотел как можно меньше изменить код, о котором идет речь. Я отбрасываю const, чтобы программа скомпилировалась, а результат правильный. –

0
#include <string>  // std::string 
#include <iostream>  // std::cout 
#include <sstream>  // std::stringstream 
using namespace std; 

int main() 
{ 
    stringstream ss; 
    int n=100; 
    char buffer[100]; 
    char *p = buffer; 
    ss << n; 
    ss >> p; 
    cout << p; 
    return 0; 
} 

Это фиксируя только проблема, которую вы непосредственно столкнулись - нет хранения за p так что это будет крах. Стилистически есть много других вещей, чтобы улучшить/исправить, но это должно показать вам, какая часть этого была фактически неправильной.

Смежные вопросы