-2

これは私のコードの一部です

    std::string s;  
    getline(cin, s);

    std::cin.clear();
    s.erase(std::remove_if(s.begin(), s.end(), my_predicate), s.end());
    char *str1  = (char*)malloc(sizeof(char)*(s.size()+1));
    const int length = s.length();
    for(int i=0; i < length; ++i)
    {
        s[i] = std::tolower(s[i]);
    }
    strncpy(str1,s.c_str(), s.length()+1);

    printf("\n");

問題は、出力しないと \n コードがクラッシュすることです。memcpy と strdup も試しましたが、役に立ちませんでした。エラーやこれを取り除く方法はありますか????

4

2 に答える 2

0

の書き込み可能なコピーがどうしても必要な場合は、関連する質問に対するこの回答をstd::string s確認してください。それ以外の

char *str1  = (char*)malloc(sizeof(char)*(s.size()+1));
strncpy(str1,s.c_str(), s.length()+1);

基本的に、これを行います:

boost::scoped_array<char> writable(new char[s.size() + 1]);
std::copy(s.begin(), s.end(), writable.get());
writable[s.size()] = '\0'; 

// access char * via writable.get()!

これには、後でメモリを解放するかどうかを心配する必要がないという追加の利点があります。

于 2012-09-21T09:08:20.813 に答える
0

あなたのコードが完璧だとは思いませんが、クラッシュする理由がわかりません。あなたが言うので、 printf("\n") はクラッシュを防ぎます。ヒープはすでに破損していると思います。おそらく、myPredicate のコードを表示するか、指定されたスニペットをスタンドアロンでテストして理由を見つけてください。

于 2012-09-21T09:04:17.383 に答える