在visualc++中,将字符从一个字符串复制到另一个字符串中
copy chars from a string into another in visual c++
我有一个char[]
,比如str1,我如何将几个字符从str1复制到另一个char[]
,比如str2。像在java中一样,您通常使用String
方法substring()
作为String。我能为char[]
做这件事吗?
str2 = str1.substring(3,6);
CString有这样的功能吗?我可以将char[]
转换为CString
吗?
C++具有等效于Java String
的std::string
。制作一个#include<string>
,然后以类似的方式使用其substr()
方法。
如果使用Microsoft CString,请使用Mid方法:http://msdn.microsoft.com/en-us/library/ms928955.aspx
Yes CString确实有这样一个方法。当您提到CString时,很明显您使用的是Windows和MFC。STL中包含的std::字符串可能是更好的选择,尤其是对于非ANSI字符串。Qt框架还有一个优秀的字符串类。
您可以使用c函数strncpy:
char*strncpy(char*目标,const char*源,size_t num);
示例:
#include <string.h>
char* str1 = "this is my awesome string";
char* str2 = new char[4];
// str + 3 because you wanna copy 3 elements
// starting at index 3 (this is in fact pointer "magic")
// so: "s i" is copied into str2
str2 = strncpy(str2, str1 + 3, 3);
使用C++的std::string
而不是char
的数组(C方式),它非常通用,可以省去缓冲区溢出等问题。
这里有一个快速演示,你可以在这里看到。。。
#include <string>
#include <iostream>
int main()
{
char str1[] = "how do I copy few chars?";
// Create a std::string from char pointers
std::string str2(str1 + 3, str1 + 9);
std::cout << "str2 = '" << str2 << "'" << std::endl;
// Create a std::string from another
std::string str3 = str2.substr(1, 4);
std::cout << "str3 = '" << str3 << "'" << std::endl;
// Create a std::string from a literal
std::string str4 = "Goodbye!";
std::cout << "str4 = '" << str4 << "'" << std::endl;
}
对于复制字符,您也可以这样尝试。。。。但是在处理内存空间时非常小心
char str1[] = "beatiful chik",str2[5];
ZeroMemory(str2,5);
int start= 9,Length = 4;
memcpy(str2,&str1[start],sizeof(char)*Length);
AfxMessageBox(str2);