鱼C论坛

 找回密码
 立即注册
查看: 2684|回复: 3

字符串处理函数之strcpy函数

[复制链接]
发表于 2019-3-19 22:30:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.第一个问题str1 长度是16,str2的长度是11 然后执行了strcpy(str2,str1)命令后str2 变成了如图Original St 此时的str2的长度为12请问这是怎么一回事情
2.第二个问题也就是str2存放的是Original St 为何打印输出Original String?
字符串处理函数问题.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-19 22:41:12 | 显示全部楼层
strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。

这是一种不安全的复制方式,不同编译器结果应该不一样,可能还会报错。
你这里
str1 复制到 str2,把原来str2及str2后面的空间都用str1覆盖掉了.所以最终完全打印str1的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-20 18:58:45 | 显示全部楼层
ba21 发表于 2019-3-19 22:41
strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空 ...

咦那还是有问题啊
1.str1复制到str2 既然是复制,那为什么最后打印输出的结果是ring?
2.为什么在debug中str2中的内容为Original St 打印输出为Original String?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-20 20:19:24 | 显示全部楼层
本帖最后由 ba21 于 2019-3-20 20:31 编辑
愈伤组织 发表于 2019-3-20 18:58
咦那还是有问题啊
1.str1复制到str2 既然是复制,那为什么最后打印输出的结果是ring?
2.为什么在debug ...


自己琢磨吧!
/*
1. 栈 地址从高地址到低地址分配栈的
2. 栈 入栈是由右至左
3. 栈 先进后出

strcpy 把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 返回指向dest的指针。

// 2、str2 入栈
N // N 最后进
e
w

S
t
r
i
n
g
'\0'  // '\0' 先进
// 1、str1 入栈
O  // O 最后进
r
i
g
i
n
a
l

S
t
r
i
n
g
'\0'  // '\0' 先进

*/

2019320_200546.jpg
图上 str1 str2 还是原来的地址,并没有改变。

参考代码:
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char str1[]={"Original String"}; // 有\0
  6.         char str2[]="New String"; // 有\0
  7.         char *newstr1;

  8.         newstr1 = strcpy(str2, str1); // 把str2的地址,返回给newstr1

  9.         printf("%s\n", str1);
  10.         printf("%s\n", str2);
  11.         printf("%s\n", newstr1);

  12.         return 0;

  13. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 12:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表