1

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.hstrcspn()

別のプロジェクトでは、ある時点で問題が存在しますが、x64 で 4 の結果を表示する代わりに、Win32 では表示されますが、x64 では 6 が表示されます。この同じプロジェクトの別のファイルでは、問題は上記と同じです。ある種の UB のように見えますが、明らかに与えられたコードはこの問題を再現できます。私が知る限り、ここでは UB を導入していません。

編集: さらにテストを行った後、返される値coutの代わりに使用しprintfても 0 と 1 になりました。

4

4 に答える 4