C ++中strncpy
的等价物是什么? strncpy
在C中工作,但在C ++中失败。
这是我正在尝试的代码:
string str1 = "hello";
string str2;
strncpy (str2,str1,5);
答案 0 :(得分:10)
相当于C strncpy()
(其中,BTW,拼写为std::strncpy()
在C ++中,并且在标题<cstring>
中找到)是std::string
的赋值运算符:
std::string s1 = "Hello, world!";
std::string s2(s1); // copy-construction, equivalent to strcpy
std::string s3 = s1; // copy-construction, equivalent to strcpy, too
std::string s4(s1, 0, 5); // copy-construction, taking 5 chars from pos 0,
// equivalent to strncpy
std::string s5(s1.c_str(), std::min(5,s1.size()));
// copy-construction, equivalent to strncpy
s5 = s1; // assignment, equivalent to strcpy
s5.assign(s1, 5); // assignment, equivalent to strncpy
答案 1 :(得分:3)
您可以在std::string
的{{1}}版本上使用basic_string::copy,或使用std::copy,它可以使用指针作为输入迭代器。
顺便说一句,“strncpy在C ++中失败了”是什么意思?
答案 2 :(得分:3)
strncpy
适用于字符数组,它在C ++和C语言中都可以正常工作
如果你在C ++中使用strncpy
字符数组,并且它不起作用,可能是因为你的C ++代码中有一些错误:如果你需要帮助,请告诉我们。
如果您正在寻找的是复制字符串的方法(即:std::string
),字符串的复制构造函数或赋值运算符将执行您正在寻找的内容:
std::string a = "hello!";
这将复制整个字符串,而不会有任何缓冲区溢出的风险。无论如何,正如John Dibling在评论中所说,它不提供strncpy
的相同语义:它不允许您指定要复制的字符数。
如果您需要复制一定数量的字符,还有其他方法:std::string
提供复印机最多n
个字符的构造函数,或者您可以使用其他答案中提出的其他方法
答案 3 :(得分:0)
strncpy可以从C ++中的cstring header
获得。因为它是C特定的函数,你必须只处理C类字符串,即字符数组,而不是C ++的字符串对象
#include<cstring>
using namespace std;
int main(int argc, char *argv)
{
char *s,*v;
strncpy(s,v,0);
}
以上内容将正确编译,但没有用处。
在使用C ++时,请尝试使用string
对象及其赋值运算符的复制方法来分配不同的字符串。 Copy方法采用一个参数,您可以在其中指定要复制到目标字符串对象的字符数。
答案 4 :(得分:0)
strncpy不会将std::string
作为参数。原型是
char * strncpy ( char * destination, const char * source, size_t num );
,提供的链接提供了有关如何使用它的说明和示例。
我会坚持使用std::string
,但如果必须,请使用c_str()
std::string
方法获取char *
指针
答案 5 :(得分:-1)
C ++中strncpy
的等效值为strncpy
。
您的代码中只是做错了,请发布您的代码和错误。
答案 6 :(得分:-1)
没有内置的等价物。你必须滚动自己的strncpy。
#include <cstring>
#include <string>
std::string strncpy(const char* str, const size_t n)
{
if (str == NULL || n == 0)
{
return std::string();
}
return std::string(str, std::min(std::strlen(str), n));
}