C++中char* 和string的区别是?

char *c;
string s;
我的理解是,c是一个指针,它指向一串字符的存储空间,但末尾程序不会自动添加'\0'标记。在使用s进行操作的时候,程序会自动帮我们处理s末尾的'\0'。不知道是不是这样?

另外,在使用ifstream.open时,要求传入一个char *变量作为文件名,但直接输入时却用ifstream.open("文件名")这种方式。我不明白,这个双引号里的内容不是字符串string吗?但如果我使用一个string定义的变量代替括号内的部分,又会导致编译不通过。求教,谢谢~
char * 是传统的基本串类型,带尾0的字符串,要一套专门的处理串的子程序;
string 是面象对象的串对仔搭橘象,封装了许多函数,功能更强;
这两个类型可以互相枝山转换,但这是不同的类型,有的传统老式函数ifstream.open
它的参数类型是char *,你就不能用念团string.
s.c_str() 就是将String类的字符串转换成C风格的字符串(即char*) string是STL C++标准模板库对字符操作的封装,安全性可用性念弊含空都比C风格的好,建议去学习学习仔老族
char* 是一个数据类型,而string则是一个类