gpt4 book ai didi

c++ - Visual Studio 2012 中 strcspn 的奇怪问题

转载 作者:行者123 更新时间:2023-11-30 00:36:20 25 4
gpt4 key购买 nike

我在 Visual Studio 2012 中遇到了 strcspn() 的奇怪问题。

当我将以下代码编译为 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 中的一个错误?当对 strcspn() 方法使用 cstringstring.h 时,存在此问题。

在一个单独的项目中,问题曾一度存在,但不是在 x64 中显示结果 4,而是在 Win32 中显示,但在 x64 中显示 6。在同一项目的不同文件中,问题与上述相同。它似乎是某种 UB,但显然给出的代码可以重现此问题,据我所知,我没有在此处介绍任何 UB。

编辑:经过进一步测试,使用 cout 而不是 printf 返回的值也为 0 和 1。

最佳答案

strcspn 需要指向空终止字符串的指针作为两个参数,您需要按以下方式修复您的代码。

char delimiter_[] = ",";
printf( "%d\n", strcspn( css_.c_str( ), delimiter_ ) );

关于c++ - Visual Studio 2012 中 strcspn 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com