有一字符串,包含n个字符,写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串? (下面是我写的,运行无误,结果出现了问题.点解?)

mychenphotos 2009-05-01 04:48:04
#include<stdio.h>
#include<string.h>
char* copy_1(char *a,int m,int n)
{
char temp[100];
strcpy(temp,&a[n-m]);
return temp;
}
main()
{
char b[40],*ch;
int i;
for(i=0;i<10;i++)
scanf("%c",&b[i]);
ch=copy_1(b,5,10);
printf("%s\n",ch);
}
...全文
6665 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
光宇广贞 2009-05-01
  • 打赏
  • 举报
回复
strcpy(temp,&a[n-m]);
错了。

你这是从m开始复制吗?
你这是从n-m位开始复制。
magipan 2009-05-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mychenphotos 的回复:]
该如何更改呢,刚试过,把temp搞成全局变量也没用.
[/Quote]应该是你的字符数组b没有设置适当的字符串结束符
for(i=0;i <10;i++)
scanf("%c",&b[i]);
b[i]=0;//加上这一句
yingkundu 2009-05-01
  • 打赏
  • 举报
回复
问题很多的,10分太少了。

#include <stdio.h>
2 #include <string.h>
3
4 char *copy_1(char *,int,int);//首先声明函数,不然在声明之前调用的话,函数的返回值就会强制为int。
5
6 char *copy_1(char *a,int m,int n)
7 {
8 static char temp[100];//不能声明为char temp[100],因为数组是局部变量,当copy_1结束时,temp就会销毁了。加上static之后
9 char *pp=NULL; //temp数组就会保存在常量区,而不是堆栈里面。
10 pp=a+m;//用一指针指向要复制的首地址。
11 strncpy(temp,pp,n-m);//用strncpy更安全。
12 return temp;
13 }
14 main()
15 {
16 char b[40],*ch;
17 int i;
18 scanf("%s",b);
19 printf("you have inputed %s\n",b);
20 ch=copy_1(b,5,10);
21 printf("%s\n",ch);
22 }
23
在Linux下已经成功运行。
HelloDan 2009-05-01
  • 打赏
  • 举报
回复

char * strncpy ( char * destination, const char * source, size_t num );



<cstring>

Copy characters from string

Copies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.

No null-character is implicitly appended to the end of destination, so destination will only be null-terminated if the length of the C string in source is less than num.

Parameters

destination
Pointer to the destination array where the content is to be copied.
source
C string to be copied.
num
Maximum number of characters to be copied from source.



Return Value
destination is returned.
//你可以用这个,参考一下我上面的那个例子。能够实现其中的一块都可以的
//
mychenphotos 2009-05-01
  • 打赏
  • 举报
回复
该如何更改呢,刚试过,把temp搞成全局变量也没用.
HelloDan 2009-05-01
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>

int main()
{
char b[40];
scanf("%s",b);
//ch=copy_1(b,5,10);
printf("%s\n",b);
char newchar[100];
strcpy(newchar,b+5);
printf("%s\n",newchar);

return 0;
}


HelloDan 2009-05-01
  • 打赏
  • 举报
回复
return temp;
局部变量啊。
课程目标:学习Java语言字符相关的知识、字符编码常识和正则表达式的使用,并完成案例前导课程:《Java工程师必学系列课程》前4部课程内容:本课程是《Java工程师必学系列课程》的第5部分,主要讲解Java语言字符相关知识、字符编码常识和正则表达式的使用。本课程涉及的主要内容可以分为四部分:一、String、StringBuffer和StringBuilder类基本常识、基本原理和使用技巧二、字符编码常识三、Java语言正则表达式的详细语法和使用技巧四、实战案例课程说明:在开发Java程序的过程,最常用的类莫过于字符相关的类。可以毫不夸张的说,任何一个Java程序,都离不开对字符保存和处理。很多学员对字符的理解只是处于比较粗浅的阶段。殊不知,如果对字符处理的不好,会影响到软件的运行效率。本课程专门讲解字符相关的知识,将从字符的存储方式、底层的运行方式等各方面深入讲解其的原理和技巧。此外,对字符进行更高级的处理,又要用到正则表达式的相关知识。正则表达式广泛应用于各种与字符处理相关的场合。它是一套独立的语言系统,经过几十年的完善和发展,现在已经非常的强大,并且形成了国际标准。各种高级编程语言,都实现了自己的表达式引擎。本课程详细的讲解了Java语言正则表达式的语法和使用技巧。掌握了正则表达式,对编程水平的提高有非常大的帮助!同时,本课程在最后一部分,安排了非常精彩的、完整的实战案例,通过实战的形式切实帮助学员提高解决具体问题的能力!预期效果:认真学习完本课程,学员可以掌握字符处理及正则表达式相关的系统知识,并能提高实际的编码水平。环境配置要求:学习本课程需安装JDK1.8或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。    因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

69,369

社区成员

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

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