c++程序 我为啥不能将string类的变量赋给char数组,我按书上打的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++程序 我为啥不能将string类的变量赋给char数组,我按书上打的?相关的知识,希望对你有一定的参考价值。

#include<iostream>#include<string>using namespace std;class Studentpublic: Student(int n, string nam, char s) num = n; name = nam;//这里报错 sex = s; cout << "C called" << endl; ~Student() cout << "D called" << endl; void display() cout << "num:" << num << endl; cout << "name:" << name << endl; cout << "sex" << sex << endl; private: int num; char name[10]; char sex;;int main() Student studl(10010, "wang_li", 'f'); studl.display(); Student stud2(10011, "zhang_fang", 'm'); stud2.display(); system("pause"); return 0;

name = nam; //这里报错
因为nam 是 string class (中文叫 “类”), 不是简单的变量。
name 是 char 数组,是简单的变量。不能用赋值语句传递。
(char数组之间 传递,也不能用赋值语句,何况现在是 class 到 char数组!)
如果 nam 和 name它们在同一定义域时,可以这样传递 它们含的字符串:
strcpy (name, nam.c_str());,
当然要注意: name的存放空间要足够,即必须长于 nam.c_str() 的字符串长度。
参考技术A 可能:
1、书有问题
2、你抄错了
改正方法:使用strcpy()

为啥不能用赋值语句将一个字符串常量直接赋给一个字符数组

因为字符数组是一个特殊的固定地址,是一个常量指针,所以不能对它赋值 参考技术A 不能直接赋值,这是一定的,因为有太多的不确定性,容易发生错误
赋值可以使用strcpy函数,strncpy函数,或者sprintf函数都行,直接等于是不行的~~~~
参考技术B 规定不能整体引用,只能单个引用
赋值除了按字符串输入赋给字符数组,或者初始化为字符串外,一般只能单个元素赋值
数组名是一个地址常量,不允许改变,但是数组中的元素是变量,可以改变赋值(数组名这个地址[常量]就是元素[变量]的存放位置)
a[]是一个常量,但是a[0]是一个变量

以上是关于c++程序 我为啥不能将string类的变量赋给char数组,我按书上打的?的主要内容,如果未能解决你的问题,请参考以下文章

如何将String类的字符串 赋值给Char数组

为啥不能用赋值语句将一个字符串常量直接赋给一个字符数组

c++中怎么把一个字符串赋给一个变量

为啥我不能只用前向声明 C++ 声明一个类的静态成员?

C++ new的时候,为啥会存在内存分配会失败的情况?啥导致的呢?

为啥“基类对象”不能调用它自己的虚函数? C++