CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

各位高手哥哥,高手姐姐帮助一下解决一个C指针问题,小弟感激不尽

楼主kongxingzhu(舒寒)2004-05-04 09:31:56 在 C/C++ / C语言 提问

这道题题目为:  
      一字符串,包含N个字符,写一个函数,将此字符串中从第M个字符开始的全部字符复制成为另一个字符串。(要求必需用指针完成)  
  (而我是这样做的,请问为什么不可以呢?)  
  char   *cop(char   *f,int   n)  
  {char   *k;  
  k=f+n-1;  
  return(k);}  
  main()  
  {char   a[80],a1[80],*from,*to,*k;  
  int   m;  
  from=a;  
  to=a1;clrscr();  
  printf("please   input   a   string:\n");  
  scanf("%s",from);  
  printf("\n");  
  printf("please   input   the   number   you   want   to   copy:\n");  
  scanf("%d",&m);  
  printf("\n");  
    to=*cop(from,m);  
  printf("%s",to);  
  }  
   
   
  顺便再问一下,为什么指针输入以下两种一种可以而一种就不可以呢?  
  int   *p;  
  scanf("%d",p);  
  而另一种就不可以了  
  float   *p;  
  scanf("%f",p);  
  这中只能用  
  float   *p;  
  scanf("%f",&*p);  
  才可以这是为什么呀??  
  谢谢了,小弟感激不尽!!!!1 问题点数:20、回复次数:8Top

1 楼bm1408(向va_list学习~不用VC好多年~)回复于 2004-05-04 09:43:22 得分 0

char   *cop(char   *f,int   n)  
  {char   *k;  
  k=f+n-1;  
  return(k);}  
   
  你的代码我没有仔细的看,但是这一点就不对,你返回了一个指向站内存的指针!Top

2 楼bm1408(向va_list学习~不用VC好多年~)回复于 2004-05-04 09:51:31 得分 0

int   *p;  
  scanf("%d",p);  
   
  float   *p;  
  scanf("%f",p);  
  按理说这样的处理方法都是不正确的,因为你只是定义了一具指针,却没有具体的让他有一个指向!至所以第一个正确,我想是和计算机处理整数的方法和浮点数的不同有关!浮点数不但有大小的限制,还有精度的控制!  
   
  最好不要这样做  
  int   a=0;  
  scanf("%d",&a);  
  int   *p=&a;  
  这样不是很好吗!Top

3 楼liem(阿明)回复于 2004-05-04 09:55:36 得分 0

char   *cop(char   *f,int   n)  
  {char   *k;  
  k=f+n-1;  
  return(k);}  
  要求是复制。你这样做,仅返回了指向f第n个字符的指针,如果f内容变了,那么返回的结果也会变化,不能达到“复制”的目的。在你的主函数中再添加二句:  
  scanf("%s",from);  
  printf("\n%s",to);  
  试试。  
   
   
  顺便再问一下,为什么指针输入以下两种一种可以而一种就不可以呢?  
  int   *p;  
  scanf("%d",p);  
  而另一种就不可以了  
  float   *p;  
  scanf("%f",p);  
  这中只能用  
  float   *p;  
  scanf("%f",&*p);  
  才可以这是为什么呀??  
   
  这些做法都有问题,没有具体指向的指针是不能使用的,使用会出问题,在赋值前要为指针确定其指向。  
  Top

4 楼zxs790501(沧海一粟)回复于 2004-05-04 12:29:58 得分 0

#include   <stdio.h>  
  #define   N   30  
  #define   M   10  
   
  void   Copy(char   &   from,   char   &   to,   int   m)  
  {  
          for(int   i   =   0;   i   <   n-m+1)  
                  to[i]   =   from[i+m-1];  
          to[i]   =   '\0';  
  }  
  void   main()  
  {          
          char   a[N]   =   "";  
          scanf("%s",a);  
          char   b[N-M+1]   =   "";  
          Copy(a,b,M);  
          printf("%s",b);  
  }  
           
  Top

5 楼bnbn3(对着天小声说一声:他奶奶的)回复于 2004-05-05 12:53:58 得分 10

我给你改的,以编译通过.记的给我分.  
  int   cop(char   *f,int   n)  
  {char   *k;  
  k=f+n-1;  
  return(k);}  
  main()  
  {char   a[80],a1[80],*from,*to,*k;  
  int   m;  
  from=a;  
  to=a1;clrscr();  
  printf("please   input   a   string:\n");  
  scanf("%s",from);  
  printf("\n");  
  printf("please   input   the   number   you   want   to   copy:\n");  
  scanf("%d",&m);  
  printf("\n");  
    to=(char*)cop(from,m);  
  for(;*to!='\0';to++)  
  printf("%c",*to);  
  }Top

6 楼FreeFice(庄鱼)回复于 2004-05-05 13:20:27 得分 10

char*   cop(char*   to,const   char*from,int   max,int   pos)  
  {  
        for(int   i=0,j=pos-1;j<max   &&   *(from+i);i++,j++)  
              *(to+j)   =   *(from+i);  
        return   to;  
  }  
  int   main()  
  {  
        char   a[80],a1[80],*from,*to,*k;  
        int   m;  
        from=a;  
        to=a1;clrscr();  
        printf("please   input   a   string:\n");  
        scanf("%s",from);     //建议用gets代替scanf("%s")  
        printf("\n");  
        printf("please   input   the   number   you   want   to   copy:\n");  
        scanf("   %d",&m);  
        printf("\n");  
        printf("please   input   other   string:\n");  
        scanf("%s",to);  
        to=cop(to,from,80,m);  
        printf("%s",to);  
        return   0;  
  }  
  Top

7 楼Wolf0403(废人:独活十年~心如刀割)回复于 2004-05-05 13:56:25 得分 0

复制成为另一个字符串??还是复制到?如果是“到”不就是   strncpy   吗。。。  
  否则  
   
  char   *   dump_str(const   char   *   str,   size_t   M,   size_t   N)  
  {  
      char   *   rt   =   (char   *)malloc(sizeof(char)   *   (M   -   N));  
      if   (rt   !=   0)  
      {  
          for   (N   -=   M;   N   !=   -1;   --N)  
              rt[N]   =   str[N];  
      }  
  }Top

8 楼79bo(山芋)回复于 2004-05-05 15:12:08 得分 0

这个以前做过,编译后总出现乱码,后来发现是"\0"的问题.只要注意一下就简单了.  
  这是吧一个字符串后5位放到另一个字符串里的程序,如果放M位以后都放的话,可以改成srtlen-M做.  
  #include<stdio.h>  
  #include<string.h>  
  int   main(void)  
  {  
  char   ch1[10],ch2[10];  
  int   i,len,j;  
  gets(ch1);  
  len=strlen(ch1);  
  for(j=i=len-5;i<len;i++)  
  {  
  printf("%c",ch1[i]);  
  ch2[i-len+5]=ch1[i];  
  }  
  ch2[len-j]='\0';  
  printf("\n");  
  puts(ch2);  
  return   0;  
  }Top

相关问题

  • 给点帮助感激不尽
  • 内存不能为read!指针问题!帮忙~感激不尽
  • 急需C++教程入门电子书,哪位仁兄肯帮忙,感激不尽。
  • 单片机c语言的一个问题,请各路大侠指点迷津!感激不尽!!!
  • 200分求如下菜单例题,有A,B,C...栏,以及下拉子菜单,搞定将感激不尽!
  • 求学习ASP.NET(C#)的好教材,明天打算去买,希望大家能推荐几本,感激不尽!
  • 谁能帮我弄到delphi6的中文帮助文件,感激不尽!(我只能出这么多分)
  • &&&&&&小弟现在初学COM,有谁留下QQ,帮助小弟,小弟感激不尽。
  • 特急,特急,高手帮忙,感激不尽,感激不尽!!!
  • 看<<C++大学教程>>受阻,各位看过的没看过的都帮兄弟一把,在下感激不尽。

关键词

  • 指针
  • 字符
  • scanf
  • 指向
  • 字符串
  • cop
  • 复制
  • 问题
  • float
  • 返回

得分解答快速导航

  • 帖主:kongxingzhu
  • bnbn3
  • FreeFice

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo