2017-01-17 5 views
0

stringstreamを使ってcharポインタに整数を代入したい。しかし、このプログラムをss >> pで実行している間にエラーが発生しています。ここで私を助けてください私はバッファに最初に入る整数をしたいとchar *に割り当てる必要があります。文字列を使ってcharポインタに整数を代入する

#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の内容を文字列の代わりにchar型に入れる方法](http://stackoverflow.com/questions/8765574/how-to-put-stringstream-contents-into-char-type-in​​stead-string-タイプは) –

答えて

1

使用にstringstream :: C++文字列を取得するにはSTR、その後、(.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; 
} 

char型のポインタはすぐに文字列が外になるようとして無効になることに注意してください範囲。何らかのファクトリ関数の動作が必要な場合は、値で文字列を返し、strlcpyかnewとshared_ptrを使用してください。

+0

私はそれを取得しませんでした。簡単に説明してください –

+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の背後にはストレージがありません。スタイリストには改善や修正が必要なことがたくさんありますが、これは実際に間違っていた部分を示すはずです。

関連する問題