有一个不理解的问题,为什么c++里给字符串赋值必须要strcpy但是c里面就可以直接用scanf赋值?
不行提示的错误是什么呢?
因为=运算符不支持对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
试试这个