我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。