| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5240 人关注过本帖
标题:求一个指针的长度
只看楼主 加入收藏
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
楼上的我的结果是12vc++6.0

学习需要安静。。海盗要重新来过。。
2008-03-15 23:28
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-3-15 23:17 的发言:[/bo]

#include"string.h"
#include"stdio.h"
void fun(char *w,int n)   
{
    char t,*s1,*s2;
    s1=w;
    s2=w+n-1;  
    while(s1


若声明:
char s[]="1234567";
则有:
strlen(s)=7; 字符串长度,不统计结尾的\0;
sizeof(s)=8; 数组占据的空间大小,包含了结尾的\0;
计算数组元素个数的典型表达式:sizeof(s)/sizeof(s[0]);
若把数组作为参数传递,则会退化为相应类型的指针。
例如 function(s);在function体中,s被视为char*;
2008-03-15 23:37
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
[bo]以下是引用 [un]simplelive[/un] 在 2008-3-15 22:58 的发言:[/bo]

fun(char *w,int n)   /*我的理解:从下面主函数知道n=7*/
 


我觉得这个代码是写错了的,从这个函数的意图猜测,它是想实现strrev的功能,也就是把字符串反转,但是由于它的++和--运算符位置处理不当,使这个函数的功能出错了。正确的顺序应该是:
t=*s1;
*s1++ =*s2;
*s2-- =t;

fun(char *w,int n)   /*我的理解:从下面主函数知道n=7*/
{char t,*s1,*s2;
s1=w;s2=w+n-1;   /*把字符串"1234567"的首地址赋给s1,把w+6赋予s2.*/
while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}/*s1与s2比较是不是比首地址处字符的ASCII码?t=*s1++是怎么执行的,是先将s1所指的内容赋予t,再s1指向下一个字符?还是先移向下一个字符,再把此字符赋予t呢?)*/
}
2008-03-15 23:44
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-3-15 23:28 的发言:[/bo]

楼上的我的结果是12vc++6.0

我在 2005 下面运行第一个例子的代码,也是strlen=5;

char *p="abcde\0fghijkl\0";
cout<<strlen(p)<<p<<endl;
getchar();
return 0;
2008-03-15 23:51
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
#include "stdio.h"
#include<string.h>

main()
{  
   char *p="abcde\Of\0gh\0jik\0";
    printf("%d\n",strlen(p));
}
/*为了避免过多的争议还是自己上机检验一下为妙*/
好吧..诸位.
2008-03-16 00:03
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
多多实践为妙啊!
=7.
2008-03-16 00:25
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
int main(void)
{
    char * p= "abcde\Ofghjik\0";
    printf("%d %d\n", strlen(p), sizeof(p));
    getchar();
    return 0;
}

Input: 5 4  (非TC)

—>〉Sun〈<—
2008-03-16 00:37
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
[bo]以下是引用 [un]cosdos[/un] 在 2008-3-16 00:37 的发言:[/bo]

int main(void)
{
    char * p= "abcde\Ofghjik\0";
    printf("%d %d\n", strlen(p), sizeof(p));
    getchar();
    return 0;
}

Input: 5 4  (非TC)


很显然,你是在win32下的环境,地址是4字节.
2008-03-16 00:52
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
楼上的没什么意思..这个题目不同编译器答案是不一样的..如果是vc6.0它会认为指针指向得字符是常量是不允许修改的..还有的vc++6.0显示的是12..最后就是我也用vc2005只是觉得它要.net框架做出来的程序要别人也有.net框架..所以你知道的所谓答案不一定都是完美的...呵呵

学习需要安静。。海盗要重新来过。。
2008-03-16 09:19
glee_1218
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-15
收藏
得分:0 
字符串以\0作为结尾
字符串的结尾是\0,编译时将遇到的第一个\0作为字符串结尾,如果用strlen函数求字符串长度,这个长度是不将\0算在内的。可是楼主的程序中间那个不是\0,而是\o,编译器会认为这是一个转义字符,所以。。。

再说一句,NULL不是\0,\0的ASCII是0,而在STDIO.H这个头文件中是这样对NULL预定义的: #define NULL 0所以它们为0的“成因”不一样。
2008-03-16 16:27
快速回复:求一个指针的长度
数据加载中...
 
   



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

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