2013-03-12 7 views
0

я создал определенный объем памятидобавление текста в выделенной памяти

char* str; 
str = char(char*) malloc(15); 

, когда я это сделать

memcpy(str, "AB", 2); 
memcpy(str, "CDEFG", 5) 
cout<<"Value of str: "<<str<<endl; 

выход значение стоимости посуточной: DEFGH то, что я вижу, он переписывает предыдущая memcpy как я могу добавлять текст в str так, чтобы каждый текст добавлялся, добавляется к предыдущему значению str, а не перезаписывает предыдущее значение и начинает с начала

+1

Почему бы просто не использовать 'strcat'. В этом случае, почему бы не использовать 'std :: string' для начала. –

+2

'memcpy (str + 2," CDEFG ", 5);' – sgarizvi

+1

[tag: C++]? 'std :: string str =" AB "; str + = "CDEFG"; 'Done. – Johnsyweb

ответ

2

Вы используете std::string:

#include <string> 
#include <iostream> 
int main() 
{ 
    std::string str = "AB"; 
    str+= "CDEFG"; 
    std::cout << str << "\n"; 
} 
0

Использование strcat вместо memcpy.

Или используйте `memcpy (str +2," CDEFG ", 5);

[И удалить +1 при печати значения, так как она должна, конечно, печатать CDEFG, не DEFGH - это, очевидно, ошибка в обработке cout потока ...]

0

Следите, как много символов вы написали и скорректировали свой указатель. В вашем примере:

memcpy(str, "AB", 2); 

memcpy(str+2, "CDEFG", 5) 

Кроме того, ваша строка не будет NULL прекращена. Для последней копии вам нужен еще один символ, чтобы скопировать '\ 0'. Либо используйте strcpy, либо лучше всего используйте std :: string:

#include <string> 
int main() 
{ 
    std::string s = "AB"; 
    s += "CDEFG"; 
} 
Смежные вопросы