Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++`assign()`在C中是等价的 关于C++中如何实现C?>代码(赋值)< /代码>?_C++_C - Fatal编程技术网

C++`assign()`在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

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 *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