2014-10-30 186 views
0

我正在写一个函数,它通过引用和字符数组以及数组的大小接收字符串。该字符串中已经有字符。我试图擦除字符串中的字符并复制数组中的字符。 我试着设置一个for循环来复制,但如果字符串太小或太大,它就不起作用。我不能在这个函数中使用strcopy。需要一些指导。如何将一个字符数组复制到一个字符串C++

void functionname(string &first, char arr[], int size) { 

int i; 

    (for i = 0; i < size; i++) { 
    first[i] = arr[i]; 
    } 

} 
+2

对此不起作用的是什么?你有错误吗?他们是什么? – 0x499602D2 2014-10-30 02:42:56

+0

FWIW,当'first'的传入值的'.size()'小于'size'参数时,你的代码是不可靠的。假设'first'是“abc”,'arr []'是VWXYZ并且大小是5 ...你将'VWX'复制到'abc'上 - 这是允许的 - 但是然后尝试将'Z'复制到' 4]'这是(C++ 11的)保证拿着一个NUL但不合法写入(对于C++ 03它可能不是一个NUL并且也是未定义的行为来写),然后当然编写最终的'Z'甚至超出了任何可能的NUL,甚至在C++ 11中,索引操作是未定义的行为,更不用说写入了...更多... – 2014-10-30 03:13:56

回答

2

您可以使用std::string的默认赋值运算符=,只是做

first = arr; 
+0

只是一个注释:如果'arr'持有ASCIIZ文本(即由NUL/0字符终止的文本字符,您不认为它是文本/值的一部分),而zzz777的回答则愉快地将字符串设置为包含数组中的第一个“size”字符*即使* some/all都是NUL 。 – 2014-10-30 03:02:19

2

的std :: string具有的功能做first.assign(ARR,大小)

1

以下作为std :: string替代赋值运算符(=),以便char *允许从字符指针直接赋值给字符串。

#include <iostream> 
#include <string> 
#include <cstring> 

using namespace std; 

void functionname(string &first, char arr[], int size) 
{ 
    first = arr; 
} 

int main() 
{ 
    std::string x = "mystring"; 
    char buff[x.length()]; 
    strcpy(buff, "other"); 

    cout << x << endl; 
    functionname(x, buff, x.length()); 

    cout << x << endl; 

    return 0; 
} 
0

string有一个构造函数,它复制一个字符数组并获取一个计数。无论arr数组内有什么内容,这都可以工作,甚至可以嵌入空字符。

void functionname(string &first, char arr[], int size) { 

    first = string(arr, size); 

} 

再次,内容arr被复制到字符串,则无需在此之后保持arr左右,如果你不需要它了。

相关问题