strncpy_s - 缓冲区太小断言

时间:2017-10-03 08:28:51

标签: c++ strncpy

作为小程序的一部分,我需要将字符串转换为char数组。我想使用strncpy_s()方法,但我一直在断言“缓冲区太小”。 这就是我的代码:

char* ostr = new char[sizeof(str)+1];
strncpy_s(ostr, sizeof(ostr), str.c_str(), sizeof(ostr));

希望有人可以帮助我。

1 个答案:

答案 0 :(得分:3)

变量str似乎是std::string个对象。对象的大小是其成员变量的大小,std::string通常是指针(指向实际字符串)和变量表示字符串的长度。

如果要获取包装字符串的长度,则需要使用length函数。

此外,您对strncpy_s的调用还存在另一个问题:您执行sizeof(ostr),这是指针的大小,而不是它指向的内存大小到。

最后,如果要将指向字符串的指针传递给C函数,则直接在调用中使用str.c_str()。或者,如果C函数需要修改字符串(但不重新分配它),那么使用例如str.data()&str[0]

如果C函数需要重新分配数据,则无法使用new[]进行分配。如果你的系统有,你需要使用malloc(或者可能strdup。)