社区
C语言
帖子详情
看看这道面试题.............
ilbj
2003-09-12 02:10:08
char* a = NULL;
char* b = "123";
strcpy(b, a);
问b现为何值?
能分析一下吗,关于strcpy?
...全文
32
28
打赏
收藏
看看这道面试题.............
char* a = NULL; char* b = "123"; strcpy(b, a); 问b现为何值? 能分析一下吗,关于strcpy?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
w803007
2003-11-06
打赏
举报
回复
hehe
Bandry
2003-10-22
打赏
举报
回复
说过很多次了,还说
scatzr
2003-10-22
打赏
举报
回复
老大,这种问题也拿来讨论的津津有味,真是服了你们了
Wolf0403
2003-10-21
打赏
举报
回复
strcpy 设计为尽量的简单,这样可以在很多时候达到效率最大化:譬如在已经有内存池或者什么别的已经分配好缓冲区的环境下,在进行内存分配是多此一举。
TianGuangZao
2003-10-21
打赏
举报
回复
to Andy84920(你也不懂):
to layman11(羚羊):
这是 strcpy 正规写法,不信可以去看看它的源码。
一般的标准库函数都被设计的足够简单,用来完成一些基本的任务。
strcpy 不会管 dst 指针所指向的空间是否足够,它只管负责拷贝。
检查空间的责任落到了编程者的肩上,你必须在使用 strcpy 前,确保目标有足够的空间。
很多新手在不熟悉库函数的情况下,想当然,往往会碰到很多奇怪的错误。
修改字符串常量是未定义行为,这个问题以前讨论过很长一个贴。
这里就不再罗嗦了。
Jinhao
2003-10-21
打赏
举报
回复
char* b = "123"; == const char* b="123";
"123"是被放在静态储存区中,常量一个
layman11
2003-10-21
打赏
举报
回复
那位老大写的
; Algorithm:
; char * strcpy (char * dst, char * src)
; {
; char * cp = dst;
;
; while( *cp++ = *src++ )
; ; /* Copy src over dst */
; return( dst );
; }
也是有错误的,没有考虑目的字符串和源字符串的长度问题导致的溢出问题,
应该先释放目的字符串指针指向的空间,申请源字符串长度+1的新空间,再
拷贝.
xyc6838
2003-10-21
打赏
举报
回复
关注
joyself
2003-10-21
打赏
举报
回复
将strcpy(b,a)改为 b = a; 如果我们取b的值发现程序没有问题,不然出现
运行错误, 说明不能取保NULL指针指向的值.
应为不取b的值没问题, 取b的值就不行拉, 因为指针是NULL
joyself
2003-10-21
打赏
举报
回复
对,楼上所言既是.
strcpy的两个基本实参都不对的.
对于 char *b = "456",我想是这样的, 指针b的值是可以改变的,但指针所指向的
值是不能变的
所以楼上友人说的:
________________________________________
不过写成 char *b = "123"; 也可以。
为什么"123"是个字符串常量,它还可以被改变呢?
EG: b[0] = 'a';
之类的操作.
________________________________________
是不对的.可以简单的写个程序验证哦
将strcpy(b,a)改为 b = a; 如果我们取b的值发现程序没有问题,不然出现
运行错误, 说明不能取保NULL指针指向的值.
如果将 char *a = NULL;改为 char *a = "456";
b = a;
取b的值就是456了, 因为b被赋为a了
langzi8818
2003-10-21
打赏
举报
回复
第一,这个函数不能传NULL
第二,b是一个指向常量的指针,他的内容是不可以改变的
firedevil
2003-10-21
打赏
举报
回复
不错
Andy84920
2003-10-21
打赏
举报
回复
二 分配内存并不是有 strcpy 来完成的,这不是它关心的。所以需要你自己考虑溢出问题。
分配内存是怎么处理的?不是在strcpy内部申请空间的吗?
三
不过写成 char *b = "123"; 也可以。
为什么"123"是个字符串常量,它还可以被改变呢?
EG: b[0] = 'a';
之类的操作.
TianGuangZao
2003-10-21
打赏
举报
回复
一 没错,传递 NULL 指针无意义,可以直接:
char* a = NULL;
char* b = "123";
b = NULL;
二 分配内存并不是有 strcpy 来完成的,这不是它关心的。所以需要你自己考虑溢出问题。
三 char * b = "123"; 中 b 不是字符串常量,b 是指向字符或字符串的指针。
字符串常量 "123" 并没有赋给 b,而是把字符串的首个字符的地址赋值给指针 b 或讲成 b 指向字符串的首地址。
正规的写法是:const char *b = "123"; 更加安全些。
不过写成 char *b = "123"; 也可以。
Andy84920
2003-10-21
打赏
举报
回复
为什么说b的地址是不可写的?
我认为一是不能传递给函数NULL指针.函数本身这样定义.
二它内部实现是要申请一个a所指的字符串所占的内存大小然后再让b来指向.
那一个NULL指针指向的地方如何来申请它呢?大小是什么呢?
这样就会出现运行时错误!
三我认为b虽然是一个字符串常量但它声明是声明成char *,为什么不可写呢?
又不是 const char * = "123";
我想知道为什么"123"是字符串常量还可以赋给char *,而不用进行强制转换.
我觉得应该是const char * b = "123";这样呀!
谁能解释一下么?
ZhouHM
2003-10-21
打赏
举报
回复
我在tc下可以编译通过也可以运行,搂主的写法确实是很不安全的,但是拿来讨论一下也无妨。我觉得b的值是任意的,主要取决于内存地址 0 的内容为何值,如果为0则b为空,否则是所有非0连续存贮单元的值。但是要注意内存地址 0 的内容不为空的时候是很危险的,因为b所值向的地址不可知,一旦指向其它有用的地址区域,结果不可预料!
jakeye
2003-09-12
打赏
举报
回复
同意.agree
鄢老
2003-09-12
打赏
举报
回复
我试着运行了一下,可以通过编译,但不能运行。不过,你写的那种形式的确很少见,一般是一个指针指向一个变量或数组,在由它的变量或数组来赋指。直接给指针赋指最好少用,因为没有数组和变量的帮助,不好确定指针所指的位置。
Wolf0403
2003-09-12
打赏
举报
回复
呵呵,内存地址 0 到 0x7ffff 吗多少的一段确实是不能读写的
njtu
2003-09-12
打赏
举报
回复
不能给strcpy传空指针,这是函数的约定。如果不遵守这个约定
该函数不保证产生的结果。
; //Algorithm:
; char * strcpy (char * dst, char * src)
; {
; //参数不能是空指针
; assert( src != NULL && dst != NULL);
; char * cp = dst;
;
; while( *cp++ = *src++ )
; ; /* Copy src over dst */
; return( dst );
; }
加载更多回复(8)
Java 面经手册·小傅哥.pdf
这是一本以
面试题
为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...
面试 SQL整理 常见的SQL
面试题
:经典50题
三、50道
面试题
2.汇总统计分组分析 3.复杂查询 sql
面试题
:topN问题 4.多表查询 【
面试题
类型总结】这类题目属于行列如何互换,解题思路如下: 其他
面试题
: SQL基础知识整理: select 查询结果 如:...
大厂算法面试真题解析
相信很多朋友们无论是在学校还是已经工作都了解算法和数据结构的重要性。无论是实际的工作还是面试,这都是基础的基础,是你不可或缺的一部分。... 面试前不可不看的课程 还等什么,年薪50万的职位已经在向你招手。
最新Java
面试题
,常见
面试题
及答案汇总
Java最新
面试题
、
面试题
答案汇总
2021年SpringBoot
面试题
30道
文章目录前言SpringBoot
面试题
内容1.谈谈你对Spring Boot的理解?2. 为什么需要Spring Boot?3. 说出Spring Boot 的优点4. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?5. Spring Boot 的配置文件有哪几...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章