const char *,string,char[]类型之间的转换
注:对于string中第k个字符,可以使用string[k]和string.at[k]来访问
a. string 转 const char*
方法一:使用data()函数
int main() {
string m = "2342";
const char* p = m.data();
int k = 0;
while (p[k] != NULL) {
cout << p[k] << ",";
k++;
}
}
方法二:使用c_str()函数
int main() {
string m = "2342";
const char* p = m.c_str();
int k = 0;
while (p[k] != NULL) {
cout << p[k] << ",";
k++;
}
// 直接使用cout << p更加简单方便
}
b. string转char[](string 转char *,不需要指定const char类型)
调用string的copy函数:第一个参数为数组对象,第二个参数为长度,第三个参数为起始位置。
int main() {
string m = "2342";
char p[50] = { 0 };
m.copy(p, 4, 0);
int k = 0;
while (p[k] != NULL) {
cout << p[k] << ",";
k++;
}
// 直接使用cout << p更加简单方便
}
初始化一个数组时,char类型,默认为’\0’,但是需要至少指定第一个,否则认为没有初始化。int类型默认为0
增强版:采用动态内存分配可以减小程序需要的内存空间
int main() {
string m = "2342";
int len = m.length() + 1;
char *p = new char[len];
m.copy(p, 4, 0);
p[len - 1] = '\0';
cout << p;
delete[] p;
// 直接使用cout << p更加简单方便
}
c. char[]和char *转string
直接赋值即可。
int main() {
const char *p = "wang";
const char q[] = "helloworld";
string a = p;
string b = q;
cout << a;
cout << b;
}
其他:
char *imageGrabMode = new char[64];
char*modelName = new char[256];
memcpy(imageGrabMode, (const void*)ReadConfig::GetInst().GetValue("image_grab_mode").c_str(), 64 * sizeof(char));
uint16 imageGrabFrameRate = (uint16)atof(ReadConfig::GetInst().GetValue("image_grab_frame_rate").c_str());
memcpy(modelName , (const void*)ReadConfig::GetInst().GetValue("model_path").c_str(), 256 * sizeof(char));
float scoreThreshold = (float)atof(ReadConfig::GetInst().GetValue("score_threshold").c_str());