作为小程序的一部分,我需要将字符串转换为char数组。我想使用strncpy_s()方法,但我一直在断言“缓冲区太小”。 这就是我的代码:
char* ostr = new char[sizeof(str)+1];
strncpy_s(ostr, sizeof(ostr), str.c_str(), sizeof(ostr));
希望有人可以帮助我。
答案 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
。)