C语言中从指定位置开始拷贝指定长度的字符串?

xiaoyao6650 2008-10-24 02:32:53
我是C语言新手。
请问C语言中怎样实现从指定位置开始拷贝指定长度的字符串?
只能用循环一个一个赋值吗?
有没有相应的函数可供使用呢?
...全文
5326 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyao6650 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 Arthur_ 的回复:]
a[9]=char(255); 等价于 a[9]=(char)255
[/Quote]
将这个写入有什么用吗?
anybbs 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 anybbs 的回复:]
引用 9 楼 xiaoyao6650 的回复:

怎么不可以呢?
我定义了两个数组
char a[]="abcdefg";
char b[10];
strncpy(b, a+1, 2);
//或者 memcpy(b,a+1,2);
puts(b);

显示的结果都是:
bc¥¥¥¥¥¥¥¥¥……¥(¥表示乱码)abcdefg

这是为什么啊
是我的指针用的不对吗?



strncpy会自动在目的串最后加一个结束符
而memcpy则不会加


================



[/Quote]



哦,sorry, strncpy当copy的字符少于源字符串时是不会自动加结束符的
anybbs 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaoyao6650 的回复:]
怎么不可以呢?
我定义了两个数组
char a[]="abcdefg";
char b[10];
strncpy(b, a+1, 2);
//或者 memcpy(b,a+1,2);
puts(b);

显示的结果都是:
bc¥¥¥¥¥¥¥¥¥……¥(¥表示乱码)abcdefg

这是为什么啊
是我的指针用的不对吗?
[/Quote]


strncpy会自动在目的串最后加一个结束符
而memcpy则不会加


================



Arthur_ 2008-10-24
  • 打赏
  • 举报
回复
a[9]=char(255); 等价于 a[9]=(char)255
xiaoyao6650 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Arthur_ 的回复:]
a[10]=char(255); //传统的想法是:难道没有越界吗?
[/Quote]
是我写错了,应该死是a[9]=char(255);
cyj626 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dic_walter 的回复:]
引用 9 楼 xiaoyao6650 的回复:
怎么不可以呢?
我定义了两个数组
char a[]="abcdefg";
char b[10];
strncpy(b, a+1, 2);
//或者 memcpy(b,a+1,2);
puts(b);

显示的结果都是:
bc¥¥¥¥¥¥¥¥¥……¥(¥表示乱码)abcdefg

这是为什么啊
是我的指针用的不对吗?


char b[10] = {0};
强烈建议初始化!!!!!
[/Quote]

up
lbh2001 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xiaoyao6650 的回复:]
还有一个问题
就是
char a[10]="abcdefgbcj";
a[10]=char(255);
这句话是什么意思啊?
[/Quote]
将数组结束处改写为-1
但最好不要这样用
此时为越界使用,会产生破坏
Arthur_ 2008-10-24
  • 打赏
  • 举报
回复
a[10]=char(255); //传统的想法是:难道没有越界吗?
shiyi820509 2008-10-24
  • 打赏
  • 举报
回复
最大只能用到a[9]啊 用a[10]就数组越界了
xiaoyao6650 2008-10-24
  • 打赏
  • 举报
回复
还有一个问题
就是
char a[10]="abcdefgbcj";
a[10]=char(255);
这句话是什么意思啊?
dic_walter 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaoyao6650 的回复:]
怎么不可以呢?
我定义了两个数组
char a[]="abcdefg";
char b[10];
strncpy(b, a+1, 2);
//或者 memcpy(b,a+1,2);
puts(b);

显示的结果都是:
bc¥¥¥¥¥¥¥¥¥……¥(¥表示乱码)abcdefg

这是为什么啊
是我的指针用的不对吗?
[/Quote]

char b[10] = {0};
强烈建议初始化!!!!!
xiaoyao6650 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Arthur_ 的回复:]
char a[]="abcdefg";
char b[10];
strncpy(b, a+1, 2);
加一个b[2] = '\0';
[/Quote]
谢谢了
可以了
原来是没有结束符号
Arthur_ 2008-10-24
  • 打赏
  • 举报
回复
char a[]="abcdefg";
char b[10];
strncpy(b, a+1, 2);
加一个b[2] = '\0';
xiaoyao6650 2008-10-24
  • 打赏
  • 举报
回复
怎么不可以呢?
我定义了两个数组
char a[]="abcdefg";
char b[10];
strncpy(b, a+1, 2);
//或者 memcpy(b,a+1,2);
puts(b);

显示的结果都是:
bc¥¥¥¥¥¥¥¥¥……¥(¥表示乱码)abcdefg

这是为什么啊
是我的指针用的不对吗?
Arthur_ 2008-10-24
  • 打赏
  • 举报
回复
strstr 或者 strchr找到位置

根据返回的指针作为起始点
memcpy(youbuffer, start, len);
anybbs 2008-10-24
  • 打赏
  • 举报
回复

strncpy(dest, src+POS, len)
dest: 目的
src : 源
POS : 指定位置
len : 长度
jakky520 2008-10-24
  • 打赏
  • 举报
回复
int strncpy(char *s1,char *s2,int n);
xhs_lh04 2008-10-24
  • 打赏
  • 举报
回复
memcpy(desc,src+offset, len);
xhs_lh04 2008-10-24
  • 打赏
  • 举报
回复
strncpy(desc, src+offset, len);
lbh2001 2008-10-24
  • 打赏
  • 举报
回复
memcpy(des, source, sizof(source));
加载更多回复(2)

69,373

社区成员

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

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