社区
C语言
帖子详情
请问这个字符串拷贝 错在哪里哦?
Javcs
2007-03-14 11:28:11
main()
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p2);
}
...全文
187
11
打赏
收藏
请问这个字符串拷贝 错在哪里哦?
main() { char *p1=“name”; char *p2; p2=(char*)malloc(20); memset (p2, 0, 20); while(*p2++ = *p1++); printf(“%sn”,p2); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Javcs
2007-03-15
打赏
举报
回复
是的 指到串尾去了
chengzanmiao
2007-03-15
打赏
举报
回复
跟越界没关系,在p1的最后"\0"是可以保护的。。
p2指针被修改后最后指向字符串的末尾,所以打印不出什么东西来。。
char *p1=“name”;
char *p2,*p3;
p2=(char*)malloc(20);
p3 = p2
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p3);
xinai0521
2007-03-15
打赏
举报
回复
main()
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p2);//错在这里,其它什么地方都没有错!
}
xinai0521
2007-03-15
打赏
举报
回复
请大学认真测试过后再说吧!
while(*p2++ = *p1++);
0040D7CC mov ecx,dword ptr [ebp-8]
0040D7CF mov edx,dword ptr [ebp-4]
0040D7D2 mov al,byte ptr [edx]
0040D7D4 mov byte ptr [ecx],al
0040D7D6 mov ecx,dword ptr [ebp-8]
0040D7D9 movsx edx,byte ptr [ecx]
0040D7DC mov eax,dword ptr [ebp-8]
0040D7DF add eax,1
0040D7E2 mov dword ptr [ebp-8],eax
0040D7E5 mov ecx,dword ptr [ebp-4]
0040D7E8 add ecx,1
0040D7EB mov dword ptr [ebp-4],ecx
0040D7EE test edx,edx ;大看这一点就会明白!
0040D7F0 je main+64h (0040d7f4)
0040D7F2 jmp main+3Ch (0040d7cc)
sakaer
2007-03-15
打赏
举报
回复
楼上的。。。还有第六条。
main函数,应该是int类型。
并返回0。
用void类型也可以吧。。应该没有什么大关系
我觉得那个while是不是可以这样写:
while((*p2++ = *p1++) != NULL)
呵呵
iamcaicainiao
2007-03-15
打赏
举报
回复
还有第六条。
main函数,应该是int类型。
并返回0。
iamcaicainiao
2007-03-15
打赏
举报
回复
第二 条,同第一条
双引号问题
printf("%s\n", p2);
第三条“%sn”,应该是"%s\n"吧
第四条,缺少必要头文件。
第五条, while(*p2++ = *p1++);
p2不断指向尾巴了。从尾巴开始输出,啥也没有啊。
所以,得保留p2的开始位置。
#include <malloc.h>
#include <memory.h>
#include <iostream.h>
int main()
{
char *p1="name";
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
char * p3 = p2;
while(*p2++ = *p1++);
p2 = p3;
printf("%s\n", p2);
return 0;
}
iamcaicainiao
2007-03-15
打赏
举报
回复
第一条:char *p1="name";
楼主你那个似乎是中文的双引号啊,要用英文下输入的双引号。
0黄瓜0
2007-03-14
打赏
举报
回复
while(*p2++ = *p1++);//p2在不断的修改自已
printf(“%sn”,p2);//最后输出时p2已指向串后,自然输出不对
OpenHero
2007-03-14
打赏
举报
回复
拷贝越界
lei001
2007-03-14
打赏
举报
回复
拷贝时越界了
main()
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while((*p2++ = *p1++)&&(*p1!='\0'));
printf(“%sn”,p2);
}
golang面试题集合.zip
判断两个给定的
字符串
排序后是否一致
字符串
替换问题 机器人坐标计算 语法题目一 语法题目二 goroutine和channel使用一 实现阻塞读的并发安全Map 高并发下的锁与map读写问题 定时与 panic 恢复 为 sync.WaitGroup 中...
Golang 面试题汇编
判断两个给定的
字符串
排序后是否一致
字符串
替换问题 机器人坐标计算 语法题目一 语法题目二 goroutine和channel使用一 实现阻塞读的并发安全Map 高并发下的锁与map读写问题 定时与 panic 恢复 为 sync.WaitGroup 中...
C语言
字符串
拷贝
C语言
字符串
拷贝
2020.10.31
字符串
的
拷贝
有几种写法 代码: 1.简单数组式写法 #include<stdio.h> void My_strcpy1(char crr[],char arr[]) { int i; for (i = 0; arr[i] != '\0'; i++) { crr[i] = arr...
字符串
和
字符串
数组
文章目录
字符串
字符串
输出
字符串
常用方法计算
字符串
的长度
字符串
拼接
字符串
拷贝
字符串
比较
字符串
数组
字符串
用双引号引起来的就是
字符串
,
字符串
由字符组成
字符串
使用%s格式化输出
字符串
以\0结尾,没有\0就不是...
字符串
常量到底存在哪了?
常量存储总结 局部变量、静态局部变量、...4、
字符串
常量也是存储在静态存储区 补充说明: 1、栈中的变量内存会随着定义所在区间的结束自动释放;而对于堆,需要手动free,否则它就一直存在,直到程序结束; 2、
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章