一道C语言指针的题目

xiaya1986cv 2008-03-26 12:40:47
#include<stdio.h>
#include<string.h>
main()
{
char* p1,*p2,str[50]="abc";
p1="abc"; p2="abc";
strcpy(str+1,strcat(p1,p2));
printf("%s\n",str);
}
A) abcabcacb B)bcabcabc C)aabcabc D)cabcabc
答案是C 想问一下怎么出来的,在Visual Studio2005里运行时出现
“22.exe 中的 0x102aed22 (msvcr80d.dll) 处未处理的异常: 0xC0000005: 写入位置 0x00415643 时发生访问冲突”这个错误
请大家帮帮忙谢谢
...全文
146 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun420 2008-03-26
  • 打赏
  • 举报
回复
不对吧?
p1指向“abc”是一个常量,怎么能对它用strcat呢?那的内存是不可操作的吧
哪的题目啊?感觉有问题
Dr.Yao 2008-03-26
  • 打赏
  • 举报
回复

先不管执行错误

strcat(p1,p2) //p1,p2都是"abc",两个字符串连起来是"abcabc"

strcpy(str+1,"abcabc")
str是"abc"
str+1就是"bc"
把"abcabc"拷贝到 str+1 ,也就是说从"b"开始拷贝,那么前面还有个"a"
所以str就是"aabcabc"

至于程序错误
因为代码这样写
p1="abc" //"abc"实际上是const变量
在strcat(p1,p2)的时候,对p1进行写操作,当然是违规的,因为p1在程序代码断,是没有写权限的

既然是个题目,也就别去解决他了,知道为什么就行了
clhposs 2008-03-26
  • 打赏
  • 举报
回复
-_- VC6竟然可以 TC不行
clhposs 2008-03-26
  • 打赏
  • 举报
回复
-_-! 说错了 首先算strcat(p1,p2)); 那么p1就是 "abcabc"了

然后复制 从str+1 也就是从str[1]开始复制
那么str[0]没有覆盖 其他的被覆盖了

所以是"aabcabc"
野男孩 2008-03-26
  • 打赏
  • 举报
回复
出异常才是正常的~~ p1和p2都指向只读内存区。所以不能在p1后面连接字符串
clhposs 2008-03-26
  • 打赏
  • 举报
回复
只能初始化时才可以指向字符串常量
alen88 2008-03-26
  • 打赏
  • 举报
回复
基本语法都不了解的人也来出考题,
lunarfan 2008-03-26
  • 打赏
  • 举报
回复
5楼正解
login_user 2008-03-26
  • 打赏
  • 举报
回复
题目很简单, 只是不能这么写~~
xxc028 2008-03-26
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
main()
{
char* p1,*p2,str[50]="abc";
p1="abc"; p2="abc";
strcpy(str+1,strcat(p1,p2)); 1:strcat(p1,p2)) 连接的字符串变成abcabc 2:str+1 从第二个数组元素开始填写
所以str 中的字符是aabcabc'\0'
printf("%s\n",str);
}
sun420 2008-03-26
  • 打赏
  • 举报
回复

p1="abc"; p2="abc"; ---》可以这么用
不过由于p1没有实际分配内存,所以不能用strcyp
sun420 2008-03-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qiuqiu173 的回复:]
p1,p2,没有分配内存就初始化

p1,p2的内容不一定是abc吧
[/Quote]
在p1="abc"这个过程中,p1已经指向一个字符串常量了
不需要在分配内存
sheenl 2008-03-26
  • 打赏
  • 举报
回复
错误百出的题目,

不管其错误, 在我的编译器上运行结果
aabcabc
DonyUnx 2008-03-26
  • 打赏
  • 举报
回复
p1="abc"; p2="abc";
可以这样用吗?我觉得要malloc一下再strcpy吧
qiuqiu173 2008-03-26
  • 打赏
  • 举报
回复
p1,p2,没有分配内存就初始化

p1,p2的内容不一定是abc吧
qiuqiu173 2008-03-26
  • 打赏
  • 举报
回复
出异常是因为p1,p2,没有分配内存就初始化(p1="abc"; p2="abc")

strcpy(str+1,strcat(p1,p2));
strcat(p1,p2)) :连接p1,p2 所以为abcabc
strcpy(str+1,"abcabc"); 从str的第二个开始覆盖 所以结果为: aabcabc
niudaping 2008-03-26
  • 打赏
  • 举报
回复
运行出来是bca呀

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧