C++`assign()`在C中是等价的 关于C++中如何实现C?>代码(赋值)< /代码>?
C++代码示例:C++`assign()`在C中是等价的 关于C++中如何实现C?>代码(赋值)< /代码>?,c++,c,C++,C,C++代码示例: std::string ds; // snip // ds.assign((const char *)start, end - start); 在C中使用相同的语法时,我在编译时遇到以下错误: 错误:在非结构或联合中请求成员“赋值”如果要在C中使用C字符串,请查看string.h中使用C字符串的函数(如strcpy) 似乎您指的是以下代码片段 std::string ds; char s[] = "Hello Wotld"; char *start = s; char *en
std::string ds;
// snip //
ds.assign((const char *)start, end - start);
在C中使用相同的语法时,我在编译时遇到以下错误:
错误:在非结构或联合中请求成员“赋值”
如果要在C中使用C字符串,请查看string.h中使用C字符串的函数(如strcpy)
似乎您指的是以下代码片段
std::string ds;
char s[] = "Hello Wotld";
char *start = s;
char *end = s + sizeof( s ) - 1;
ds.assign( start, end - start );
在C语言中,处理原始指针。因此,类似的事情可以如下所示
char * assign( char *dest, const char *source, size_t n )
{
free( dest );
char *p = ( char * )malloc( n + 1 );
if ( p != NULL )
{
strncpy( p, source, n );
p[n] = '\0';
}
dest = p;
return dest;
}
比如说
char *ds = NULL; // it is important to initialize it to NULL
char s[] = "Hello World";
ds = assign( ds, s, sizeof( s ) - 1 );
//...
free( ds );
此语句ds.assign((const char*)start,end-start);将不会在C++中编译。所以我不明白你想要什么;这段代码只是试图使用您已经承认的尚未实现的内容。而且,作为C,字符串不是对象,因此没有方法。@Vlad来自莫斯科,我相信你是错的。@xtmtrx:Vlad是100%正确的。@xtmtrx“没有意识到一个简单的问题会引起一场投票风暴”嗯,如果无意中被问到:/…谢谢。我认为
strcpy
就可以了。根据参考资料中给出的示例,还有一些其他的事情需要设置,比如内存分配(在示例中,它们只是在堆栈上完成)。是的,我的错,我的意思是std::string ds代码>