| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3506 人关注过本帖
标题:字符串与数组。。拷贝
只看楼主 加入收藏
cuijingchun
Rank: 3Rank: 3
来 自:黑龙江
等 级:论坛游侠
威 望:1
帖 子:108
专家分:186
注 册:2011-9-28
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:10 
字符串与数组。。拷贝
程序代码:
# include <stdio.h>

int main (void)
{
   
   
    char a[10]="abdc", arr[20]="edffs";

    int i, j;
   
    for (i=0; i<sizeof(arr); i++)
    {
        if (arr[i] == '\0')
            break;
    }
   
    j=i;

    for (i=0; i<sizeof(a); i++)
    {
        arr[j++] = a[i];  //arr[++j]为什么就运行不了那
        if(a[i] = '\0')
            break;
    }

    printf("%s\n", arr);

    return 0;
}
arr[j++]和 arr[++j] 有什么不行

[ 本帖最后由 cuijingchun 于 2012-1-26 17:52 编辑 ]
搜索更多相关主题的帖子: 字符串 
2012-01-26 17:35
zhangxiangD
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:119
注 册:2011-12-20
收藏
得分:0 
原程序中的j=i+1应改为j=i,至于j++ 和++j的区别在于两个表达式的值不一样,但j的值都变大的了一个,要深入理解
2012-01-26 17:57
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
收藏
得分:0 
我看其他地方都没有问题,就是++j与j++的了解问题

算法,数据结构,windows核心编程.
2012-01-26 18:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其他地方沒問題?問題大著呢!

授人以渔,不授人以鱼。
2012-01-26 19:36
旭日孤帆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:180
注 册:2012-1-3
收藏
得分:15 
# include <stdio.h>

int main (void)
{
   
   
    char a[10]="abdc", arr[20]="edffs";         \\在这里你给arr字符数组和a字符数组赋初值,除前几个元素以外,全部为'\0'

    int i, j;
   
    for (i=0; i<sizeof(arr); i++)
    {
        if (arr[i] == '\0')          到这里i依次加1,等到(arr[i] == '\0')的时候跳出循环,i=5           
              break;
    }
   
    j=i;                                                               i 的值给  j ,  j=5

    for (i=0; i<sizeof(a); i++)
    {
        arr[++j] = a[i];  //arr[++j]为什么就运行不了那  在这里你如果用++j的话,会把arr数组第六个元素也就是arr[5]空出来,从第七个开始填元素,第六位保持原始值‘\0’
        if(a[i] = '\0')                                             执行完循环后,  数组内元素的排列顺序为edffs'\0'abdc

            break;    }

    printf("%s\n", arr);                                          无论用什么方法输出,遇到‘\0’都会停止,后面的元素就不会再输出了                  

    return 0;
}

[ 本帖最后由 旭日孤帆 于 2012-1-26 20:30 编辑 ]
2012-01-26 20:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
if(a[i] = '\0')
這個判斷是幹什麼的?

授人以渔,不授人以鱼。
2012-01-26 23:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這個算法,是否對各種各樣的a、arr數組值都適用?如果發生了問題,你猜可能是什麼地方出問題?

授人以渔,不授人以鱼。
2012-01-27 00:47
旭日孤帆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:180
注 册:2012-1-3
收藏
得分:0 
回复 7楼 TonyDeng
用他这种求字节数的方法,然后遇到‘\0’就停止,应该等价于strlen函数吧????
2012-01-27 11:31
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
if(a[i] = '\0')

总有那身价贱的人给作业贴回复完整的代码
2012-01-27 11:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
回复 8楼 旭日孤帆
是的,那等價於strlen(),不過這個代碼稍嫌啰嗦。

1樓代碼之所以不能++j,是因為j=i下初入循環arr[j++]正好arr[j]=='\0',若++j則前躍把a[i]賦給arr[j+1],arr[j]處留下'\0',這樣後面都被廢掉,當然不行了。代碼沒有考慮數據溢出,是很明顯的漏洞,如果strlen(arr)>10,strlen(a)也大一點,就會出問題,這種偶然出現的現象,到他程序寫大一點,就很難知道是這個函數造成的,到時到處查,耗費的精力比現在把隱患改掉多得多。
收到的鲜花
  • cuijingchun2012-01-27 17:07 送鲜花  5朵   附言:那个是打错了, ==\0 想写一下string中的函 ...

授人以渔,不授人以鱼。
2012-01-27 13:59
快速回复:字符串与数组。。拷贝
数据加载中...
 
   



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

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