免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3406 | 回复: 11
打印 上一主题 下一主题

异或的这个字符怎么给?不要笑话哦 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-05 11:21 |只看该作者 |倒序浏览

  1. char *xorbuf(char *data, int len, char ch)
  2. {
  3.   int ct = len;
  4.   char *d = data;

  5.   if (!data || len < 0) return NULL;

  6.   while (ct-- > 0)
  7.     *d++ ^= ch;

  8.   return data;
  9. }

复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-12-05 12:57 |只看该作者
看到数字键6了吗?

论坛徽章:
0
3 [报告]
发表于 2006-12-05 13:01 |只看该作者
什么意思?
"怎么给"是指什么意思?

论坛徽章:
0
4 [报告]
发表于 2006-12-05 13:41 |只看该作者

  1. int main(void)
  2. {
  3.    const char *p = "I love you";
  4.    xorbuf(p, strlen(p), '');  //第三个参数?
  5. }

复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2006-12-05 14:25 |只看该作者
原帖由 lenovo 于 2006-12-5 12:57 发表
看到数字键6了吗?

傻了吧?
很喜欢猜谜语是吧?

论坛徽章:
0
6 [报告]
发表于 2006-12-05 14:58 |只看该作者
原帖由 SybaseLU 于 2006-12-5 13:41 发表

  1. int main(void)
  2. {
  3.    const char *p = "I love you";
  4.    xorbuf(p, strlen(p), '');  //第三个参数?
  5. }

复制代码

不是'^='这个意思,而是调用xorbuf(...)时, 第三个参数应该是什么字符?调试都是Segmentation fault

论坛徽章:
0
7 [报告]
发表于 2006-12-05 15:04 |只看该作者
原帖由 SybaseLU 于 2006-12-5 13:41 发表

  1. int main(void)
  2. {
  3.    const char *p = "I love you";  //这个字符串是const的。
  4.    xorbuf(p, strlen(p), '');  //第三个参数?
  5. }

复制代码


注意p的类型。

论坛徽章:
0
8 [报告]
发表于 2006-12-05 15:09 |只看该作者
const char *p = "I love you";

const char* 类型的数据,那个函数试图修改它...

论坛徽章:
0
9 [报告]
发表于 2006-12-05 16:36 |只看该作者
调试源码:

  1. ...
  2. const char *array = "whatever"; //array地址不变,所指向的内容可以变
  3. printf("Address:0x%x\n", &array);
  4. printf("Context:0x%x\n", array);

  5.   array = "I love you";  //另外的常量的地址被赋值给array作为内容, 但不能单独赋值,*array++ = 'x'等。
  6.   printf("Address:0x%x\n", &array);
  7.   printf("Context:0x%x\n\n", array);

  8.   const char *cp = "you love me";
  9.   printf("Address:0x%x\n", &cp);
  10.   printf("Context:0x%x\n", cp);

  11.   cp = array;
  12.   printf("Context:0x%x\n", cp);
  13.   printf("%s\n", cp);
复制代码


调试结果:

  1. [root@root ANSI]# ./a.out
  2. Address:0xfeefb464
  3. Context:0x80485b0
  4. Address:0xfeefb464
  5. Context:0x80485d5

  6. Address:0xfeefb460
  7. Context:0x80485ef
  8. Context:0x80485d5
  9. I love you

复制代码

论坛徽章:
0
10 [报告]
发表于 2006-12-05 16:54 |只看该作者
const char *p = "I love you";

我的意思是 "I love you" 是 const char* 类型的数据,程序载入的时候这个字符串放在不可写入的内存区域中,因此你只能修改 p 指向的地址,不能修改 p 指向的字符串的内容,不然就会段错误。

你那个函数显然是直接修改 p 指向的字符串,所以会出错。你应该 malloc() 一块内存,把字符串的内容写进去,然后作为参数传递给那个函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP