我std::string什么时候应该使用,什么时候应该char*用来管理charC++中的s 数组?
char*如果性能(速度)至关重要,并且由于内存管理,您愿意接受一些有风险的业务,那么您似乎应该使用它.
是否还有其他需要考虑的方案?
我知道这是一个非常基本的问题.我很困惑为什么以及如何以下不同.
char str[] = "Test";
char *str = "Test";
Run Code Online (Sandbox Code Playgroud) 当我使用char或char*时,visual studio 2012(11)只会播放最后一个字符,例如:
#include <iostream>
#include <string>
int main(){
using namespace std;
char chName = 'Alex';
cout<<chName;
}
Run Code Online (Sandbox Code Playgroud)
它只显示"x".它是正确的是我使用
string strName = "Alex"
但在那些有参数作为char的函数中,字符串不能作为参数传递.在这种情况下,VS编译器说字符串不能转换为int.还告诉我char和char*之间有什么区别.我是一名PHP开发人员,C++非常混乱.请帮我.
作为一个学习练习,我一直在研究自动类型转换在C++中的工作原理.我知道通常应该避免自动类型转换,但我想通过了解它的工作原理来增加我对C++的了解.
我已经创建了一个StdStringConverter可以自动转换为a的类std::string,但编译器(Debian上的g ++ 4.3.4)似乎不会在将对象与real进行比较时进行转换std::string(请忽略缺少传递引用和不必要的临时对象创建):
#include <string>
class StdStringConverter
{
public:
explicit StdStringConverter(std::string name) : m_name(name) {}
operator const std::string () const { return m_name; }
private:
std::string m_name;
};
int main()
{
StdStringConverter converter(std::string("Me"));
const std::string name = "Me";
// Next line causes compiler error:
// no match for 'operator==' in 'converter == name'
return (converter == name) ? 0 : 1;
}
Run Code Online (Sandbox Code Playgroud)
在另一方面,如果我稍微改变到一个CStringConverter类,自动转换不会发生,但比较char可能的指针是不是我想要的结果:
#include <string> …Run Code Online (Sandbox Code Playgroud) 我需要对我要问的问题进行深入的技术解释,而不是解决方案。
我已经学习了一个星期的指针,我理解得很好。但是在编写程序时,我偶然发现了这个错误:
无法将参数“2”的“const std::string”转换为“const char*”到“char* strcpy(char*, const char*)”
所以我很容易地解决了string.c_str()没有问题。但我对为什么会这样很感兴趣。我一直在疯狂地寻找为什么 const 字符串与constchar * 不同。当人们解释一个字符串时,他们说它与 char * 没有什么不同,那么为什么在字符串之前添加一个 const 不会使它成为一个const char *?
我想在我的cpp文件中的多个位置使用字符串常量.我应该使用std :: string还是char []?
static const std::string kConstantString = "ConstantStringValue";
static const char kConstantString[] = "ConstantStringValue";
Run Code Online (Sandbox Code Playgroud)
我被告知更喜欢后者,因为它"避免静态分配".char数组是否也必须静态分配?
我在c ++编程语言中看到一些建议,比如"不要在struct类型中使用char",
struct Student{
int stdnum, FieldCode, age;
double average, marks, res[NumOfCourses];
char Fname[20], Lname[20], cmp[20];
};
Run Code Online (Sandbox Code Playgroud)
最好使用:
struct Student{
int stdnum, FieldCode, age;
double average, marks, res[NumOfCourses];
string Fname, Lname, cmp;
};
Run Code Online (Sandbox Code Playgroud)
关于此事,欢迎任何其他建议
先感谢您
我的书说如果我想读一个最大长度为40个字符的字符串,我必须声明一个长度为41的变量,但它没有说明原因.
char name[41];
cin >> name;
cout << name << endl;
Run Code Online (Sandbox Code Playgroud)
我知道这是一个新手问题,我确实是一个C++新手.
我希望你能帮助我.谢谢.
编辑:
感谢您的回答,我没想到在如此短的时间内获得如此多的好消息.
谁负责在char数组的末尾插入NULL终止符?
按Enter后"\n"会发生什么?
再次感谢.
我是c ++的新手,我想从一开始就知道,
这些制作字符串的方法是否完全以相同的方式工作,并且在每种情况下始终给出完全相同的结果?他们中的任何一个结果有什么不同吗?
1) char greeting [6] = { 'h','e','l','l','o','\0' };
2) char greeting[] = "hello";
3) #include <string>
string greeting = "hello";
Run Code Online (Sandbox Code Playgroud)