为什么别人可以在c++中给char*传递字符串?

如题所述

第1个回答  2021-12-02
首先编译通过不代表对。这是C/C++为了兼容老代码故意留下的一个漏洞,这里的问题更大的是些这个代码的人没有懂这是不对的,写了错误代码
正确的是StrCopy第二个参数类型应该写成const char*,即使编译能过也不应该写char*追问

我赞同你的观点,我看他这么写就觉得不对,
我用vs2019这么写甚至直接复制它所有的代码进行编译都是报错类型不对,
但是奇怪就奇怪在我用vs2019直接打开他写的代码时可以编译通过并运行的.
如果能帮我解答这个疑惑将万分感谢

追答

看不出是啥原因,如果你代码和他一样,打字和复制不应该又类型不对错误

追问

目前我怀疑可能是版本的问题,它好用用的是低版本的可以这么用,在高版本就不可以这么用,

第2个回答  2021-12-03
这完全是正常的。在C语言或者C++语言中,字符串常量的表示就是以指向他的的首字母的字符指针来表示。所以这里以一个字符串常量作为一个参数,实际上就是以这个字符串的首字符地址作为参数传递到第二个形式参数的。追问

你这种说法我也赞同,但是为啥同样的代码我写出来和复制出来都不行呢?只有打开他的工程才能使用

第3个回答  2021-12-03
传递字符串并不是它的功能,他应该是在别的语句中进行了一种编辑,改变了他的输入方法,所以让你看起来感觉是传递字符追问

并没有,单纯的就只有我截图这些代码在往上有几个头文件也没有别的源文件

第4个回答  2021-12-03

字符串常量字符串的值本身就是一个指针

对应形参类型char *,语法上没有任何问题,编译自然能通过

函数中对其赋值,导致的是运行时的出错,C语言语法没有强制要求编译器对此做检查

第5个回答  2021-12-04
c++中的字符串常量为什么可以赋值给char*?比如可以写一下代码:char*str="hello";其中的"hello"不是const char*类型

为什么别人可以在c++中给char*传递字符串?
首先编译通过不代表对。这是C\/C++为了兼容老代码故意留下的一个漏洞,这里的问题更大的是些这个代码的人没有懂这是不对的,写了错误代码 正确的是StrCopy第二个参数类型应该写成const char*,即使编译能过也不应该写char

不是说指针只能被赋值存储地址么,为什么char*可以直接赋值字符串。
是的。语句里p是(char*)型地址。*p是值,char型。p="welcome";不太好理解,C\/C++里有不少不严谨的地方,没有太多道理好言。这句就理解成自动做了强制转换了:p=(char*)"welcome";于是:cout<

c++ 将字符地址传给 char* 打印出来有
字符串可不是这样的,这里实际是a\\0 有个\\0结束符,所以他有2个字节,你这里声明了1个char *ch_1 = &ch_a; 其实是1个指向字符串的1个指针,所以打印这个指针,会以这个指针的地址开始打印直到\\0的所有内容,类似于C里面的puts(p) 传递1个地址,但是打印字符串。 根本的区别在于1个是字...

为什么可以给指针赋值为字符串
从现象看,那就是“给指针赋了一个字符串”。但,在C\/C++中,字符串的指针就是指向这个字符串的第一个字符的指针,所以char *p="abc"的确切意思并不是把字符串abc赋给char *型指针p,而是“创建一个常字符串'abc',并把这个字符串第一个字符(即a)的地址赋给char *型指针p"。举一反三,写...

c++中,要把字符串“ABCD”赋值给一个变量X,为什么 char x; x="ABCD...
char x[];x[]="ABCD";这里不可以是因为申明一个字符数组(char x[];是字符数组)要给他的大小赋值即中括号里要有值,而后面的char x[] = "ABCD";可以的原因是系统通过"ABCD"已经知道了字符数组的大小,是5,注意:还有一个隐藏的'\\0',所以是5.字符数组类似字符串 ...

...但是在chatch中写成 const char* c 为什么就可以了呢
类型不匹配,你就无法捕获异常。"!!!"的类型是 const char[4],可以隐式转换为const char *,不能隐式转为char *。

...间参数如何传递,比如a.cpp中a[]="hello",char *b=a,如何在b.cpp获 ...
问题解决:你的补充问题中,推荐答案中已指出,不能将a,b两指针定义为函数局部变量,extern跨域也是文件域,不是函数域。http:\/\/zhidao.baidu.com\/question\/463226362.html?oldq=1 你可以看下这个帖子的问题和回答,应该会对你有帮助。

关于C++: 为何可以把字符串常量赋给字符指针,而整型常量却不能赋给整 ...
像"hello"这样的字符串,它在C\/C++里的类型是字符数组:char[6](注意,不是const char[6],因为C语言没有这个类型,C++又要向下兼容C)。而字符数组是可以赋给字符指针的。但是const char*是不能贱给char*的。

为什么c++中gets ,cin.get()等可以读取一个字符数组,但不能读取一个字 ...
首先我们知道C语言是面向过程的,在纯C的情况下,char是一个字符,但我们往往要面对一串字符,所以程序员们通过开辟一个字符数组保存内容,由此衍生出了类似strcpy、strcmp这种函数。这种情况下说字符数组等价于字符串是没有问题的。但后来有了面向对象,C++相对C多了完善的对象支持,同时增加了string专门...

关于C++中string类型变量的赋值
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数...

相似回答