2016-08-17 30 views
-2

以下の警告を取り除くにはどうすればよいですか?整数変数に文字列サイズ(文字列:: npos)を代入しているときの暗黙の定数変換警告のオーバーフロー

size_t filesize = getFilesize(strLogFileName.c_str()); 
// Open file 
int fd = open(strLogFileName.c_str(), O_RDONLY, 0); 
assert(fd != -1); 
// Execute mmap 
char* mmappedData = 
    (char *) mmap(NULL, filesize, PROT_READ, MAP_PRIVATE | MAP_POPULATE, fd, 0); 
assert(mmappedData != NULL); 
string strFileContent(mmappedData); 

// warning: overflow in implicit constant conversion 
int pos, lpos = string::npos; 

この警告を無視するのではなく、この警告を修正するためにコードにどのような変更が必要な場合がありますか?

size_t pos, lpos = std::string::npos; 

またはauto

+0

警告メッセージは表示されませんか? (https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.htmlを参照) – VolAnd

+2

エラーを示す行はどこですか? –

+0

int pos、lpos =文字列:: npos; – user2256825

答えて

4

string::nposは、size_tです。 size_tintに割り当てると、変換中にオーバーフローが発生する可能性があります。次のようにそれを修正:user2079303により示唆されるように

size_t pos; 
size_t lpos = string::npos; 

それとも、あなたが使用するかstring::size_typeまたは、より便利に、autoカスタムアロケータを持つ文字列をサポートしたい場合。

+0

余分なpedantryについては、カスタムアロケータで文字列をサポートするために 'size_t'の代わりに' string :: size_type'を使いたいかもしれません。 – user2079303

+0

@ user2079303ありがとうございました。完全性のためにあなたの提案を答えに取り入れました。 –

4

正しいタイプを使用してください。 intの標準コンテナ、またはsignedのインデックスを付けません。 posは初期化されていないことに注意してください。

関連する問題