注册 登录
编程论坛 C语言论坛

字符串函数strcpy

LGD335060087 发布于 2020-03-25 11:23, 4644 次点击
#include"stdio.h"
#include"stdlib.h"
int main(){
    char*dst="hello";
    char*src="word";

    printf("%s",strcpy(src,dst));
    return 0;
}
出现:Warning] incompatible implicit declaration of built-in function 'strcpy'怎么改
30 回复
#2
纯蓝之刃2020-03-25 11:26
头文件增加 #include <string.h>
#3
叶纤2020-03-25 11:35
最好用const char*  因为文本是一个常量,你这是变量指针指向一个常量呀,虽然很多c编译器支持,但是很不规范
还有不要用双引号库里面的东西用<>这个
自己写的文件用“”这个,要不容易混乱
#4
binthyrain2020-03-25 16:17
自己才开始学,向老师们请教
#5
lin51616782020-03-25 16:27
看错 删除
#6
lin51616782020-03-25 16:29
回复 3楼 叶纤
带const 的确是一个比较好的习惯
但对于C语言 谈不上规范不规范
C里面字符串字面量本身不带const
指向字符串的指针 加不加const 都是合理的
#7
叶纤2020-03-25 17:01
回复 6楼 lin5161678
呵呵,我刚改正的思想,你要给我改回来吗
#8
lin51616782020-03-25 17:28
以下是引用叶纤在2020-3-25 17:01:57的发言:

呵呵,我刚改正的思想,你要给我改回来吗

谁教你 C的字符串字面量带const ?
#9
叶纤2020-03-25 17:35
以下是引用lin5161678在2020-3-25 17:28:31的发言:


谁教你 C的字符串字面量带const ?

我说字符串字面量不带const很不规范怎么了?有错,我说大部分的c编译器都支持,有错?
#10
lin51616782020-03-25 18:03
回复 9楼 叶纤
你弄错字符串字面量的意思
"12345" 这是一个字符串字面量
我说 因为 "12345" 不带const 所以
char* p = "12345";
这个p 带不带 const 都是规范的
明白吗

大多数C编译器支持 不准确
全部标准C编译器都支持 不带const的指针指向字符串字面量
#11
叶纤2020-03-25 18:16
以下是引用lin5161678在2020-3-25 18:03:38的发言:

你弄错字符串字面量的意思
"12345" 这是一个字符串字面量
我说 因为 "12345" 不带const 所以
char* p = "12345";
这个p 带不带 const 都是规范的
明白吗

大多数C编译器支持 不准确
全部标准C编译器都支持 不带const的指针指向字符串字面量

那你解释一下为什么楼主把字符串字面量复制为什么输出不了
#12
lin51616782020-03-25 18:24
回复 11楼 叶纤
修改字符串字面量是未定义行为
结果没意义
这个和const 是无关的
#13
叶纤2020-03-25 18:28
以下是引用lin5161678在2020-3-25 18:24:33的发言:

修改字符串字面量是未定义行为
结果没意义
这个和const 是无关的

既然你说了,修改字符串字面量是未定义行为,就是因为他认为变量指针指的是变量,根本没考虑字符串字面量是常量,所以他就会认为字符串字面量是可以修改的,前面加const,就不会出现这破事
#14
lin51616782020-03-25 18:33
以下是引用叶纤在2020-3-25 18:28:47的发言:


既然你说了,修改字符串字面量是未定义行为,就是因为他认为变量指针指的是变量,根本没考虑字符串字面量是常量,所以他就会认为字符串字面量是可以修改的,前面加const,就不会出现这破事


1 字符串字面量不是常量 不存在所谓的字符串常量 我特意不说字符串常量这个词 就是因为没这种东西
2 前面加const 是一个对编程有帮助的好习惯 但是 不加const 谈不上不规范 C里面的字符串字面量本来就不带const
#15
叶纤2020-03-25 18:38
以下是引用lin5161678在2020-3-25 18:33:33的发言:



1 字符串字面量不是常量 不存在所谓的字符串常量 我特意不说字符串常量这个词 就是因为没这种东西
2 前面加const 是一个对编程有帮助的好习惯 但是 不加const 谈不上不规范 C里面的字符串字面量本来就不带const

是变量没错,但不可修改啊,貌似只有c字符串字面量是不可修改的变量
#16
lin51616782020-03-25 18:39
以下是引用叶纤在2020-3-25 18:38:06的发言:


是变量没错,但不可修改啊,貌似只有c字符串字面量是不可修改的变量

但这个不可修改和const是没关系的
#17
叶纤2020-03-25 18:42
我就不明白了,专门给你留个空让你回答小白的问题,可是你偏偏不回答,就盯上我的贴,提问的人是贴主呀,我只是让帖主在小白期有个好习惯,某人就想让帖主继续修改字符串字面量哈
#18
lin51616782020-03-25 18:52
回复 17楼 叶纤
盯上你的贴是你自作多情了
我随便逛论坛
看到感兴趣的就回答
看到错误的内容就纠正
对事不对人
目测你在论坛比较活跃 但经常出错
容易被我纠正而已
觉得我盯着你 倒是大可不必
我盯着xianfajushi

最好用const char*  因为文本是一个常量,你这是变量指针指向一个常量呀

这里你认为 文本是一个常量 字符串字面量带const
所以我纠正 C里面字符串字面量不是常量 不带const

我在纠正之前特意说了 带const是一个好习惯 并没有否定这种做法

这个情况属于歪打正着
认为字符串字面量带const是歪打 不修改对象加const是正着
歪打正着 正着我没否认我在纠正歪打

#19
叶纤2020-03-25 19:00
以下是引用lin5161678在2020-3-25 18:52:03的发言:

盯上你的贴是你自作多情了
我随便逛论坛
看到感兴趣的就回答
看到错误的内容就纠正
对事不对人
目测你在论坛比较活跃 但经常出错
容易被我纠正而已
觉得我盯着你 倒是大可不必
我盯着xianfajushi


这里你认为 文本是一个常量 字符串字面量带const
所以我纠正 C里面字符串字面量不是常量 不带const

我在纠正之前特意说了 带const是一个好习惯 并没有否定这种做法

这个情况属于歪打正着
认为字符串字面量带const是歪打 不修改对象加const是正着
歪打正着 正着我没否认我在纠正歪打

人家xianfajuahi也没得罪你呀,人家不感情用事啊,起码在回答帖主的问题啊,人家回答的时候有代码啊,有思想啊,人家xianfajuahi没在这个贴回答呀
#20
lin51616782020-03-25 19:06
以下是引用叶纤在2020-3-25 19:00:55的发言:


人家xianfajuahi也没得罪你呀,人家不感情用事啊,起码在回答帖主的问题啊,人家回答的时候有代码啊,有思想啊,人家xianfajuahi没在这个贴回答呀

我和他的恩怨嘛 你不了解 也不需要了解 不用管我和他
我只说我在盯着他 没在盯着你 你放心
#21
叶纤2020-03-25 19:08
以下是引用lin5161678在2020-3-25 19:06:10的发言:


我和他的恩怨嘛 你不了解 也不需要了解 不用管我和他
我只说我在盯着他 没在盯着你 你放心

希望像你说的这样,我已经连续好几天和和你知识互怼了
#22
forever742020-03-25 19:25
喜欢标准的也不要唯标准论,
喜欢经验的也不要唯经验论,
三句话必有我师,亦有你师。
曾经有个喜欢怼人的小哥哥,名叫杨修......
#23
return_02020-03-25 19:32
意思是没有声明strcpy,加上<string.h>
#24
hbccc2020-03-25 19:41
学习学习
#25
lin51616782020-03-25 19:53
回复 21楼 叶纤
总结一下这段时间的互怼
1. cout << ends;
你认为 类型匹配 编译通过 运行输出正常 所以是正确的
我纠正 输出'\0'这个做法属于自找麻烦 ends不是给cout使用的参数
并科普 不是能编译运行输出就叫做正确 得考虑是否复合预期
cout << ends 无法确保符合预期 所以是错的
后面根据版主 rjsp 的考证
确定 ends 这个参数是给一个已经废弃的类型 std::ostrstream 设计的
用来写入字符串结尾0 不是用于输出'\0'
和我说法基本一致

2. 避免使用无符号类型/无符号数字
虽然你贴了非常多的资料打了非常多的字
但是 从这些资料得出的结论反而没有支持你的说法
比如 无符号溢出是可以依靠的确定行为 而有符号溢出反而存在危险
比如 常见的有符号溢出的行为和无符号溢出的行为是一脉相承 两者皆有相同问题 谈不上避免无符号
无符号类型的使用的确存在需要特别谨慎很容易出现错误的地方 但是你的回复都没能提到
无符号类型的使用需要特别注意的其实是 混用有符号无符号的时候 会有类型提升 结果为无符号
这是一个比较容易出错的地方
结果这个重点你没注意到 反而在无符号的优点上面死磕
然后 无符号类型存在容易出错的地方 但应该做的也不是避免使用无符号类型的
而是了解 熟悉 掌握 从心所欲不逾矩

3. 字符串逆序
题目要求 有2个
1 原地翻转 (原文 "你必须原地修改输入数组")
2 空间复杂度为O(1)(原文 "使用 O(1) 的额外空间解决这一问题")
你的实现
输入数组没有变化
空间复杂度是 O(n)
2个要求全部都没完成
后面的交流中看出你和发帖人都误会了题目的要求
题目根本没要求递归
我在后面的回复中也解释了为什么不应该使用递归

4. 今天的左值讨论
我说左值是表达式 你回复这个理解有错误
并在10楼的回复中进行详细补充
说出来你可能没注意 整个10楼的回复中
唯一一次提到左值是你在引用我说的话
这就有点尴尬了 你好像没弄清楚反驳我什么内容
看后面的讨论你似乎是想让我介绍一下表达式?

其实在二楼 rjsp的回复中就有比较详细的解答了
C语言值类别:https://zh.
C++语言值类别:https://zh.

总结完成 基本符合我说的 你在论坛比较活跃 但回复内容有时候会出现一些偏差


#26
叶纤2020-03-25 20:16
回复 25楼 lin5161678
麻烦贴网址,
#27
叶纤2020-03-25 20:19
还有今天左右值是你主动像我请教的,然后我给你的理论
#28
return_02020-03-25 20:21
两人又开打,我围观吃瓜
#29
lin51616782020-03-25 20:30
以下是引用叶纤在2020-3-25 20:16:34的发言:

麻烦贴网址,

人在外面回去再贴网址
或者你可以从你的主页中找到自己的发帖记录
这几个问题你基本有单独发帖讨论
#30
lin51616782020-03-25 20:31
以下是引用叶纤在2020-3-25 20:19:24的发言:

还有今天左右值是你主动像我请教的,然后我给你的理论

你说我说错了 而我又找不到我有什么错误
那我当然要请教你呀
这不是很正常吗
#31
叶纤2020-03-25 20:43
回复 30楼 lin5161678
明明是你向我请教的,
我习惯往收藏贴里添加新知识,添加完左右值的概念,第二天就看见你关于表达式的请教,我就想吧,好不容易你请教我一回,我要把表达式以及表达语句的理论说的明白点,然后我还让你补充新知识或者知识碰撞的知识点,谁知道你一直一直的说一些有的没的,我还给你发短信了,说这是我的收藏帖,未来要一直看的,希望你写点关于左右值以及const,&和对于表达式碰撞的地方的知识点,谁知道你还是说一些有的没的,,压根就没有补充知识
1