c++和c给字符串赋值的区别

有一个不理解的问题,为什么c++里给字符串赋值必须要strcpy但是c里面就可以直接用scanf赋值?

img

img


这里是之前打的一段代码,可以运行但是这是在c里,c++就不行

不行提示的错误是什么呢?

因为=运算符不支持对char[]类型赋值。详情查看这个:https://www.codenong.com/6901090/
而scanf是输入数据,只需要知道数组的首地址就行了。他并不是对char[]类型赋值。
在C里面可以使用,而C++不能使用。应该是你没有正确的的导入头文件,目前看代码猜测你的C++需要添加#include <cstdio>;using namespace std;

赋值是对变量进行赋值,name本身是个地址名,也是常量,可以在定义时进行这样的方式, 也可以用scanf.gets,strcpy,进行。

c++报什么错

赋值是对变量进行赋值,name本身是个地址名,也是常量

不应该啊?c++是c的超集,不该报错啊

使用 C++ 字符数组与使用 string 对象不同的第一种方式是,除了在定义时初始化它,不能使用赋值运算符给它赋值。换句话说,不能使用以下方式直接给 name 字符数组赋值:

name = "Sebastian"; // 错误

相反,要为字符数组赋值,必须使用一个名为 strcpy (发音为 string copy)的函数,将一个字符串的内容复制到另一个字符串中。在下面的代码行中,Cstring 是接收值的变量的名称,而 value 则是字符串常数或另一个 C 字符串变量的名称。

strcpy(Cstring, value);

下面的程序显示了 strcpy 函数的工作原理:

// This program uses the strcpy function to copy one C-string to another.

#include

using namespace std;

int main()

{
const int SIZE = 12;

char name1[SIZE], name2[SIZE];

strcpy(name1, "Sebastian");

cout << "name1 now holds the string " << name1 << endl;

strcpy(name2, name1);

cout << "name2 now also holds the string " << name2 << endl;

return 0;

}

程序输出结果:

name1 now holds the string Sebastian

name2 now also holds the string Sebastian

正常情况,是不可能出现这样的问题的。
c++ 是兼容C 的,所以,使用正确的头文件,你是可以使用C 的系统函数的

因为=运算符不支持对char[]类型赋值。scanf是输入数据,只需要知道数组的首地址就行了。赋值是对变量进行赋值,name本身是个地址名,也是常量。并且C++时兼容C的,使用正确的头文件就可以使用C里面的函数了。

4: 加extern "C"声明后的编译和链接方式

加extern "C"声明后,模块A的头文件变为:

1: // 模块A头文件 moduleA.h

2: #ifndef MODULE_A_H

3: #define MODULE_A_H

4: extern "C" int foo( int x, int y );

5: #endif
试试这个