所以我尝试在 C++ 中运行一个简单的程序,该程序基本上使用 C++
length()
库中的 <string>
函数来计算符号数量
这是我的自定义函数
#include <iostream>
#include <string>
using namespace std;
string TrimTextFunction() {
string Text = "Hello I am your program!";
cout << "String size is: " << Text.length();
return 0;
}
然后,我只需通过 Visual Studio 中的调试器在
main ()
方法中运行此自定义函数
int main()
{
cout << TrimTextFunction();
}
最终,我收到以下错误代码:
Exception thrown at 0x00007FFE67837A41
(ucrtbased.dll)
然后,它会将我重定向到名为“
xstring
”的内部文件,显示错误本身
没有调试器,代码会返回我需要的值
但是当我使用相同的调试器(或不使用)在
main()
函数中运行相同的代码时,它没有任何错误
#include <iostream>
#include <string>
using namespace std;
int main()
{
string Text = "Hello I am your program!";
cout << "String size is: " << Text.length();
}
我似乎缺少一些关于自定义函数的东西,特别是当我调试某些东西时
所以我的问题是:为什么主函数可以让我得到我需要的没有错误的结果,而自定义函数却不能?
我使用了自定义函数,我需要期望一个字符串结果,该结果返回字符串变量的长度,即 24
你的函数定义为
string TrimTextFunction() {
string Text = "Hello I am your program!";
cout << "String size is: " << Text.length();
return 0;
}
在本例中,使用
0
构造 std::string
正在调用构造函数
std::string(const char*, const Allocator& alloc = Allocator())
使用 s 指向的空终止字符串的副本来构造内容初始化的字符串。字符串的长度由第一个空字符确定。 如果 [s, s + Traits::length(s)) 不是有效范围(例如,如果 s 是空指针),则行为未定义。如果要推导的分配器类型不符合分配器的条件,则此构造函数不用于类模板参数推导。
请注意,从 C++23 开始,此构造函数被声明为已删除,因此甚至无法编译
std::string(std::nullptr_t) = delete;