| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 462 人关注过本帖
标题:麻烦各位大哥帮助解释下
只看楼主 加入收藏
platolgq
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:74
专家分:87
注 册:2011-2-24
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:7 
麻烦各位大哥帮助解释下
# include <stdio.h>
# include <string.h>

int main(void)
{
    void copystr(char *, char *, int);
    int m;
    char str1[20], str2[20];

    printf("\ninput string:");
    gets(str1);
    printf("which character that begin to copy?:");
    scanf("%d", &m);
   
    if (strlen(str1)<m)
        printf("input error!");
    else
    {
        copystr(str1, str2, m);
        printf("result:%s\n", str2);
    }
    return 0;
}

void copystr(char * p1, char * p2, int m)
{
    int n;   //设置n的作用是什么?
    n = 0;
    while(n<m-1)  //这个循环的作用是什么?为什么不是 n<m?
    {
        n++;
        p1++;
    }
    while(*p1!='\0')
    {
        *p2 = *p1;
        p1++;
        p2++;
    }
    *p2 = '\0';
}
搜索更多相关主题的帖子: void 大哥 void character 大哥 include character include return return 
2011-08-31 21:35
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:3 
循环的作用就是移动p1指针,让它指到第一个要copy的字符上,也就是第m个字符,其下标为m-1,所以只用n<m-1
2011-08-31 21:54
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:8 
void copystr(char * p1, char * p2, int m)
 {
     int n;   //设置n的作用是什么?..C语言中所有变量要用前都要定义..定义个整形 n 变量
     n = 0;
     while(n<m-1)  //这个循环的作用是什么?为什么不是 n<m?.......检查你输入的字符串的个数..... n<m如果这样那么下面的指针就要越界了,指针要访问字符串以外的空间了.......危险啊    !!
     {
         n++;
         p1++;
     }
     while(*p1!='\0')
     {
         *p2 = *p1;
         p1++;
         p2++;
     }
     *p2 = '\0';
 }


你的代码你确定没问题?????能运行????????

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-08-31 22:24
platolgq
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:74
专家分:87
注 册:2011-2-24
收藏
得分:0 
我知道循环是为了移动指针p1的。当 n=0, p1指向的是数组的第一个字符。
列:str1="reading_room"  如果我设m=9的话。也就是从第九个字符(r)开始复制;
     m-1=8; n<((m-1)=8); 也就是n最大为7,即n=7; 而当n=0  *(p1)='r'; n=1  *(p1)='e';....n=7时,*(p1)='_';
     所以要是*(p1)=第二个'r',那么n=8.即 n<m;

但为什么不是了?

C种的自学者
2011-08-31 22:27
platolgq
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:74
专家分:87
注 册:2011-2-24
收藏
得分:0 
麻烦各位大哥能不能说的明白点。 函数中设置变量n的目的是什么?第一个循环是怎么执行的?

C种的自学者
2011-08-31 22:47
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:8 
回复 4楼 platolgq
n=7 的时候,循环条件是满足的,也就是说现在还是要执行一次循环,p1自然就又向后移了一个了,n也就为8了
2011-08-31 23:06
凌烟
Rank: 2
等 级:论坛游民
帖 子:30
专家分:41
注 册:2011-1-10
收藏
得分:1 
void copystr(char * p1, char * p2, int m)
 {
     int n;   //设置n的作用是什么?
     n = 0;
    while(n<m-1)  //这个循环的作用是什么
     {
         n++;
         p1++;
     }
     while(*p1!='\0')
     {
         *p2 = *p1;
         p1++;
         p2++;
     }
     *p2 = '\0';


//这两个循环之间有联系?后一个while应该在前一个while循环体之内的吧。想知道循环怎么执行的话,单步运行酒知道了
2011-08-31 23:14
platolgq
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:74
专家分:87
注 册:2011-2-24
收藏
得分:0 
刚刚关了电脑,将题重新看了一遍,才发现自增运算符没有算进去。多谢各位大哥的提醒,问题解决了

C种的自学者
2011-08-31 23:19
快速回复:麻烦各位大哥帮助解释下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058499 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved