heblhc 发表于 2016-8-22 13:13:21

字符数组和字符串的大小问题

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


void main()
{
        char buf[] = {'a','b','c','d'};
        int strl = strlen(buf);
        int bufsize = sizeof(buf);
        int i = 0;
        printf("strl=%dbufsize=%d\n\n", strl, bufsize);
        for (i = 0; i < strl; i++)
        {
                printf("%c\n",*(buf+i));
        }
       
        system("pause");
}
这段代码测量buf[]的大小,通过strlen和sizeof,执行结果如下

为什么strlen是11?多谢指教!

iszhuangsha 发表于 2016-8-22 14:55:22

没有结束符的字符数组长度未知。
帮你改了一下代码:
#include<iostream>
#include<cstring>
using namespace std;

int main()
{
      char buf[] = {'a','b','c','d','\0'};
      int strl = strlen(buf);
      int bufsize = sizeof(buf);
      for (int i = 0; i < strl; i++)
      {
               cout<<*(buf+i)<<endl;
      }
      cout<<strl<<endl;
                cout<<bufsize<<endl;
       return 0;
}

darenlsq 发表于 2016-8-22 17:06:05

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含"\0")。


strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。

heblhc 发表于 2016-8-22 18:05:12

多谢啦!!

darenlsq 发表于 2016-8-23 15:23:29

heblhc 发表于 2016-8-22 18:05
多谢啦!!

不客气
页: [1]
查看完整版本: 字符数组和字符串的大小问题