2017-04-20 8 views
0

文字列がメモリのブロック内にあるかどうかを確認しようとしています。ここでは、私が開始し、チェックを開始したいメモリアドレス0x00343211を作成しました。C++データに文字列が指定されているかどうかを確認する

私がしようとしているのは0x00343211から0x00343211 + 900までのデータをchar配列に書き込み、そのchar配列内に探している文字列があるかどうかを確認することです。

これは、私はすでに

char dataBuf[1000] = { 0 }; 
memcpy((void*)dataBuf,(void*)0x00343211,900); 
if(strstr(dataBuf,"ACTIVE") != NULL) 
{ 
    //I want to check if the string "ACTIVE" is 
    //within the random data that I have written into dataBuf 
} 

を試してみました。しかし、これは動作していないようですものです。

+0

ただ、ループ、文字が「A」であれば、どうかをチェック次のメモリアドレスは残りの文字で構成されますか?正しいことをするのは難しくありませんか? – KarelG

+0

@KarelGはい、これはフレームごとに実行されるフックで行います。そういうループでやっているとかなり遅くなり、プログラムがかなり遅くなってしまうでしょうか? – reflexdev

+1

おそらく関連しています:http://stackoverflow.com/q/36878017/1938163 –

答えて

0

あなたは、メモリブロックに直接std::searchを使用して、コンパイラが効率的な実装を持っていることを祈る、このようなことができます:メモリアドレスを介して

#include <algorithm> 
#include <string> 
#include <iostream> 


int main() 
{ 
    char dataBuf[13] = { "xxxACTIVExxx" }; // block of 12 bytes + zero byte 
    std::string active = "ACTIVE"; 

    using std::begin; 
    using std::end; 

    // std::search returns dataBuf+12 if no match is found 
    if (std::search(dataBuf, dataBuf + 12, 
     begin(active), end(active)) 
     != dataBuf + 12) 
    { 
     std::cout << "ACTIVE has been found\n"; 
    } 
    else { 
     std::cout << "ACTIVE has not been found\n"; 
    } 


    return 0; 
} 
関連する問題