gpt4 book ai didi

c++ - 使用 _tcsset 时运行时崩溃

转载 作者:行者123 更新时间:2023-11-30 03:48:07 25 4
gpt4 key购买 nike

1. 我编写了以下代码,该代码编译但在运行时崩溃,在调用 _tcsset 时显示“访问冲突写入”。

void function(TCHAR *tsatz)
{
printf( "Before: %s\n", tsatz );
_tcsset(tsatz,'*');
printf( "After: %s\n", tsatz );
}

void main( void )
{
TCHAR* tsatz;
tsatz = new char[256];
tsatz = "This is a test string ";
function(tsatz);
getchar();
}

我在使用 _tcsset 时哪里错了?

2. 如果我们告诉它们目标缓冲区有多大,我知道所有“安全”功能都可以工作。但是,如果我需要在 tsatz 来自外部的“函数”中使用 _tcsset_s,有什么办法吗?

我是初学者。非常感谢我能得到的任何帮助。提前致谢。

最佳答案

您正在修改字符串文字,这是未定义的行为。

tsatz = "This is a test string ";

这不会将字符串文字复制到tsatz中,它只是将tsatz赋值给指向"This is a test string"的地址;无法修改。解决此问题的一种方法是将 tsatz 声明为数组并使用字符串文字对其进行初始化,这将自动为您将文本复制到数组中

TCHAR tsatz[] = "This is a test string ";

如果您需要跟踪数组的大小,您要么需要显式地这样做(请注意,sizeof 数组只有在操作数实际上是数组时才有效,而不是一个指针):

void function(TCHAR *tsatz, size_t numberOfElements)
{
_tprintf( "Before: %s\n", tsatz );
_tcsset_s(tsatz, numberOfElements, '*');
_tprintf( "After: %s\n", tsatz );
}

void main( void )
{
TCHAR tsatz[] = "This is a test string ";
function(tsatz, sizeof tsatz / sizeof(TCHAR));
getchar();
}

或者使用模板

template<size_t sz>
void function(TCHAR (tsatz&)[sz])
{
_tprintf( "Before: %s\n", tsatz );
_tcsset_s(tsatz, sizeof tsatz / sizeof(TCHAR), '*');
_tprintf( "After: %s\n", tsatz );
}

或者您可以只使用 std::basic_string 代替。

关于c++ - 使用 _tcsset 时运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341992/

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