strcspn()
Visual Studio 2012 でこの奇妙な問題が発生しました。
次のコードを 32 ビット Win32 コンソール アプリケーションとしてコンパイルすると、期待どおりの結果 6 が得られます。
#include <string>
#include <iostream>
#include <cstring>
int main( int argc, char **argv )
{
char delimiter_ = ',';
std::string css_ = "ESCAPE,,0,0";
printf( "%s\n", css_.c_str( ) );
printf( "%d\n", strcspn( css_.c_str( ), &delimiter_ ) );
size_t lengthOfField = strcspn( css_.c_str( ), &delimiter_ );
printf( "%d\n", lengthOfField );
std::cin.get( );
return 0;
}
ただし、この同じコードを x64 用にコンパイルすると、予期しない結果の 4 が返されます。これは VS2012 のバグですか? この問題は、メソッドにcstring
またはを使用する場合に発生します。string.h
strcspn()
別のプロジェクトでは、ある時点で問題が存在しますが、x64 で 4 の結果を表示する代わりに、Win32 では表示されますが、x64 では 6 が表示されます。この同じプロジェクトの別のファイルでは、問題は上記と同じです。ある種の UB のように見えますが、明らかに与えられたコードはこの問題を再現できます。私が知る限り、ここでは UB を導入していません。
編集: さらにテストを行った後、返される値cout
の代わりに使用しprintf
ても 0 と 1 になりました。