首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

strlen 和 sizeof 的有关问题,求

2012-03-21 
strlen 和 sizeof 的问题,求高手指点?[b]曾经在论坛的一个帖子上看到这个题,不是很确定,自己测试了一下,就

strlen 和 sizeof 的问题,求高手指点?
[b]曾经在论坛的一个帖子上看到这个题,不是很确定,自己测试了一下,就出现了问题,求高手们指点一下:
(用的是g++编译)
原来帖子链接:
http://topic.csdn.net/u/20120227/13/98ecafd0-a2e6-4714-aa90-abc355a85e94.html?seed=2122165957&r=77739973#r_77739973
这个是我的测试代码:
[code=C/C++][/code]
#include <iostream>
#include <cstring>

using namespace std;

void count ( char * string){

  int a = strlen (string);
  int b = sizeof (string);

  cout <<"the value is :"<< a << "\t" << b << endl;
}

int main() {

  char string1[] = {0x01, 0x02, 0x03};
  char string2[] = {0x01, 0x00, 0x03};
  char string3[20] = {0x01, 0x02, 0x03};
  char string4[20] = {0x01, 0x00, 0x03};

  count (string1);
  count (string2);
  count (string3);
  count (string4);

  return 0;
}
测试结果:
[code=C/C++][/code]
the value is :6 8
the value is :1 8
the value is :3 8
the value is :1 8

strlen的结果能理解,但是sizeof的结果可就不是很好理解,和大家想的都不一样,不是20!而且把数组的20换成50,结果不变!

tell me why?[/b]

[解决办法]
因为你只是把数组地址传了过去,而没把整个数组传过去...
定义函数最好为void print(char *p, int n); //n为数组大小
下面是sizeof操作结果:

C/C++ code
#include <stdio.h>int main() {    char string1[] = {0x01, 0x02, 0x03};    char string2[] = {0x01, 0x00, 0x03};    char string3[20] = {0x01, 0x02, 0x03};    char string4[20] = {0x01, 0x00, 0x03};    printf("%d\n", sizeof(string1));//结果是3    printf("%d\n", sizeof(string2));//结果是3    printf("%d\n", sizeof(string3));//结果是20    printf("%d\n", sizeof(string4));//结果是20    return 0;}
[解决办法]
我晕,你写的什么代码咯。
你传进去的是指针,
当然每个sizeof的值相同了,
应该都是4
[解决办法]
C/C++ code
#include <iostream>#include <cstring>using namespace std;int main() {    char string1[] = {0x01, 0x02, 0x03};    char string2[] = {0x01, 0x00, 0x03};    char string3[20] = {0x01, 0x02, 0x03};    char string4[20] = {0x01, 0x00, 0x03};    int a = 0;    int b = 0;        a = strlen(string1);    b = sizeof(string1);    cout<<a<<"       "<<b<<endl;    a = strlen(string2);    b = sizeof(string2);    cout<<a<<"       "<<b<<endl;    a = strlen(string3);    b = sizeof(string3);    cout<<a<<"       "<<b<<endl;    a = strlen(string4);    b = sizeof(string4);    cout<<a<<"       "<<b<<endl;    system("pause");    return 0;}
[解决办法]
这是因为
void count ( char * string){ //此时string是个指针了

int a = strlen (string);
int b = sizeof (string);

cout <<"the value is :"<< a << "\t" << b << endl;
}
sizeof(string)是对指针的取字节,永远都是4
你可以试试其他类型的,即时是int double float,他们的结果也都会是4
当数组名用作参数传递给一个函数时,这个数组名已经退化成一个指针,不能再用sizeof取得整个数据的长度了。

所以经常在函数的形参列表中,需要传递数组的时候,第一个参数是数组名,而第二个参数就是数组的长度了,这已经是一个习惯了。楼主可以看看其他的程序,你会发现这样的写法是很普遍的。

void fun ( int *arry, int length)//经常是以这种搭配出现
{
int result = sizeof(arry);
//结果一定等于 4
}
还有 char *string string 是关键字,最好不要这样定义为一个变量名

热点排行