| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1057 人关注过本帖
标题:很诡异的代码,期待高手
只看楼主 加入收藏
hackzbst
Rank: 2
等 级:论坛游民
帖 子:27
专家分:54
注 册:2009-6-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:19 
很诡异的代码,期待高手
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
    char t[]="werwer";
    char *tt;
    tt=t;
    char te[7];
    //memset(&te,0,strlen(te));  //取消注释tt为null
      printf("%s\n",tt);
}
如上面的注释,不取消时输出正常为“werwer”
取消了 输出就变成  NULL ....不懂啊 ,求救求救...
搜索更多相关主题的帖子: 期待 代码 
2009-09-04 16:45
hackzbst
Rank: 2
等 级:论坛游民
帖 子:27
专家分:54
注 册:2009-6-10
收藏
得分:0 
自己顶一下,版主帮忙看看呀~

别迷恋哥,哥只是一个传说......
2009-09-04 16:50
hackzbst
Rank: 2
等 级:论坛游民
帖 子:27
专家分:54
注 册:2009-6-10
收藏
得分:0 
再顶啊  马上下班了~~

别迷恋哥,哥只是一个传说......
2009-09-04 16:59
jetlif
Rank: 2
等 级:论坛游民
帖 子:7
专家分:28
注 册:2009-8-19
收藏
得分:0 
你用的什么编译器啊?应该没有问题的啊、
2009-09-04 17:05
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
memset(te,0,strlen(te));  

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2009-09-04 17:55
jjf1120
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-2-3
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
    char t[]="werwer";
    char *tt;
    tt=t;
    char te[] = "jjf1120";
    memset(&te,0,strlen(te));  //取消注释tt为null
    printf("%s\n",tt);
}
这样就好了,应该是char te[7];所定义的te变量的地址和t的地址相同的结果
2009-09-04 18:00
liyandong106
Rank: 2
等 级:论坛游民
帖 子:21
专家分:35
注 册:2009-9-4
收藏
得分:0 
没问题阿,我用gcc编译的 结果都是werwer
2009-09-04 18:04
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:8 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    char t[]="werwer";
    char *tt;
    tt=t;
    printf("tt is %d\n",tt);
    char te[7]=" ";
    printf("tt is %d\n",tt);
    printf("te is %d\n",te);

    memset(te,0,strlen(te));  //取消注释tt为null

    printf("%s\n",tt);
    system("pause");
    return 0;
}

我设置了下调试信息答案很容易出来了,你的数组不是用字符串初始化,所以检测不到‘\0’,没有它你后面又用了strlen这个函数,这个函数是检测到‘\0’结束的,所以就错了,只要你把数组中任一个位置置为'\0'就可以了。。

学习需要安静。。海盗要重新来过。。
2009-09-04 18:31
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    char t[]="werwer";
    char *tt;
    tt=t;
    printf("tt is %d\n",tt);
    char te[7]=" ";
    printf("tt is %d\n",tt);
    printf("te is %d\n",te);

    memset(te,0,strlen(te));  //取消注释tt为null

    printf("%s\n",tt);
    system("pause");
    return 0;
}

我设置了下调试信息答案很容易出来了,你的数组不是用字符串初始化,所以检测不到‘\0’,没有它你后面又用了strlen这个函数,这个函数是检测到‘\0’结束的,所以就错了,只要你把数组中任一个位置置为'\0'就可以了。。

学习需要安静。。海盗要重新来过。。
2009-09-04 18:31
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
晕,为什么我发的帖子都是两个呢?

学习需要安静。。海盗要重新来过。。
2009-09-04 18:33
快速回复:很诡异的代码,期待高手
数据加载中...
 
   



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

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