免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: iamfog
打印 上一主题 下一主题

请教关于字符数组长度的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-09-17 20:53 |只看该作者
关键是不是那个memset啊,0默认是字符串的结束 !(不懂乱说的)

论坛徽章:
0
12 [报告]
发表于 2006-09-17 20:55 |只看该作者
man strlen
如果没有UNIX系统,那就装个
还有这个问题最好是弄明白strlen到底是什么,strlen 计算它的参数所志向位置的前非'\0'字符的个数.如果你的字符穿没有'\0',那么后果自负. 正常的是你的串后面的某一个位置(可能早就不知道跑到哪去了)可能有个'\0',所以可能得到'奇怪'的结果.

论坛徽章:
0
13 [报告]
发表于 2006-09-17 21:25 |只看该作者
有UNIX 我就是在AIX上测试的.
strlen计算它的参数所志向位置的前非'\0'字符的个数.这个我也清楚.
第一个程序.
我做如下改动,看对不.
加memset(ca,0,sizeof(ca));
然后在strcat后面加ca[101]='\0';
输出结果跟原来是一样的,0,102;

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

  3. int main()
  4. {
  5.         char   ca[102]
  6.         char   cb[51]="aa";
  7.         char   cc[51]="a";

  8.         memset(ca,0,sizeof(ca));

  9.         printf("%d",strlen(a));
  10.         strcpy(ca,cb);
  11.         strcat(ca,cc);
  12.         ca[101]='\0'
  13.         printf("%d",strlen(a));

  14.         return 0;
  15. }
复制代码

第二个程序我做如下改动:

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

  3. int main()
  4. {
  5.         struct tt{
  6.                char   ca[102]
  7.                char   cb[51];
  8.                char   cc[51];
  9.         }tt_d;

  10.         memset(&tt_d,0,sizeof(tt_d));

  11.         strcpy(tt_d.cb,"aa");
  12.         tt_d.cb[50]='\0';
  13.         strcpy(tt_d.cc,"a");
  14.         tt_d.cc[50]='\0';

  15.         printf("%d",strlen(tt_d.ca));
  16.         strcpy(tt_d.ca,tt_d.cb);
  17.         strcat(tt_d.ca,tt_d.cc);
  18.         tt_d.cb[101]='\0';
  19.         printf("%d",strlen(tt_d.ca));

  20.         return 0;
  21. }
复制代码

但是结果还是为0,3.ca的长度为cb和cc的和.而第一个程序却为整个数组的长度.
跟我前面的一样,为何?

mik大哥和flw2大哥,上面的程序有哪里有错误或者逻辑想法的错误导致了结果的不同吗?

现在还在公司,因为要赶公交车回去了,那里不能上网.
所以先走了,明天再来这里请教.

论坛徽章:
0
14 [报告]
发表于 2006-09-17 21:53 |只看该作者
这样吧,别把别人弄疯了,你把你的代码贴出来(要能通过编译的)
以及问题 (如果有几个用1,2,3)

论坛徽章:
0
15 [报告]
发表于 2006-09-17 21:54 |只看该作者
上面的程序有哪里有错误或者逻辑想法的错误导致了结果的不同吗?

就这话把我气晕了.

论坛徽章:
0
16 [报告]
发表于 2006-09-18 01:06 |只看该作者
这算屡(这个字是不是不这样写)教不改吗

论坛徽章:
0
17 [报告]
发表于 2006-09-18 08:14 |只看该作者
strcpy(ca,cb);
strcat(ca,cc);
ca[101]='\0'

这个想错了吧,你应该在strcpy之前设cb和cc的aa和a后面为0,而不是设ca

论坛徽章:
0
18 [报告]
发表于 2006-09-18 08:44 |只看该作者
strlen是按照字符串中第一个出现的'\0'来判断长度的

[ 本帖最后由 gawk 于 2006-9-18 08:48 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2006-09-18 09:21 |只看该作者
自己都快无语了。
因为AIX的机器是内网,所以帖上来的程序都是按原来的敲的,并不是帖上来的。所以出现了错误。
flw2大哥,我自己真是在AIX下跑过很多次了的,是因为想不通,所以才来问的。
还不至于无知和无耻到什么都不做就来这里乱搞。
终归还是要怪我自己,让你误会我是乱敲了一通然后在这里胡说八道的。

前天发现了这个问题,于是昨天就写了这2个小程序测试。在AIX下确实结果如我第一次说的那样。
不然也没必要来这里浪费大家和自己的时间。

今天一早跑过来,再执行了下昨天的程序,一个代码都没改,我自己都快疯了,2个程序的结果都变成了0,3。
都快哭了。。。
谢谢谢谢各位了。对不起各位了。
斑竹把这帖给删了吧。。
真的是郁闷到极点了。。。
大家就当看看笑话吧。。。
以后也不敢再问什么东西了。。。

[ 本帖最后由 iamfog 于 2006-9-18 09:23 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2006-09-18 09:52 |只看该作者
晕~
自己抄自己的程序都能出错,
直到现在我还没明白那个 strlen(a) 里面的 a 在哪儿。
正所谓:可怜之人必有可恨之处啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP