免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8001 | 回复: 22
打印 上一主题 下一主题

memset sizeof 的段错误! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-13 18:42 |只看该作者 |倒序浏览
兄弟我这么写代码,回产生段错误,不知原理为什么特来请教代码如下

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

  3. void foo(char *m);

  4. int main(int argc, char *argv[])
  5. {
  6.     char str[]="Hello World!";

  7.     foo(str);

  8.     return 0;
  9. }

  10. void foo( char *m)
  11. {
  12.     memset(m, 0, sizeof(m)); //问题出在这里,在调用的函数内不能去memset. 如果需要 memset str[], 必须在main内。
  13. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-03-13 18:46 |只看该作者
我自己发现如果子函数内写 memset(m, 0, 13);

编译通过后就不会出现上述的问题了,看来sizeof函数有玄机!

论坛徽章:
0
3 [报告]
发表于 2010-03-13 18:49 |只看该作者
sizeof不是那么用的,你那样只能得到指针的大小。

论坛徽章:
0
4 [报告]
发表于 2010-03-13 18:56 |只看该作者
sizeof不是那么用的,你那样只能得到指针的大小。
prolj 发表于 2010-03-13 18:49



您的意思

char str[]="Hello World!";
int i;

i = sizeof(str);

//i = 4 ? 如果我想得到 i = 13 怎么用呢?

论坛徽章:
0
5 [报告]
发表于 2010-03-13 18:59 |只看该作者
测试环境 Linux nagios 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux

char str[]="Hello World!"
int i;

i = sizeof(str);

// 编译结果 i = 13 并不是prolj 所说的指针大小哦

论坛徽章:
0
6 [报告]
发表于 2010-03-13 19:00 |只看该作者
本帖最后由 prolj 于 2010-03-13 19:02 编辑

int main(int argc, char *argv[])
{
    char str[]="Hello World!";

i = sizeof(str); // 13

    foo(str);   //但是在这里数组会退化为指针

    return 0;
}
==================================
麻烦,你自己理解错误就别瞎做实验,写代码都不知道自己写的什么。

论坛徽章:
0
7 [报告]
发表于 2010-03-13 19:04 |只看该作者
谢谢 prolj 我有点明白了,太感谢了!

论坛徽章:
0
8 [报告]
发表于 2010-03-13 19:38 |只看该作者
你现在这个代码怎么会有段错误?

论坛徽章:
0
9 [报告]
发表于 2010-03-13 20:27 |只看该作者
呵呵
你这个是最起码的啊
指针退化(decay)而已

论坛徽章:
0
10 [报告]
发表于 2010-03-13 20:39 |只看该作者
指针是指针,数组是数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP