鱼C论坛

 找回密码
 立即注册
查看: 2364|回复: 5

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

[复制链接]
发表于 2016-8-22 13:13:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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=%d  bufsize=%d\n\n", strl, bufsize);
        for (i = 0; i < strl; i++)
        {
                printf("%c\n",*(buf+i));
        }
       
        system("pause");
}
这段代码测量buf[]的大小,通过strlen和sizeof,执行结果如下
捕获.JPG
为什么strlen是11?多谢指教!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-22 17:06:05 | 显示全部楼层
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含"\0")。


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

点评

我很赞同!: 5.0
我很赞同!: 5
热心帮助  发表于 2016-8-22 17:49
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-22 18:05:12 | 显示全部楼层
多谢啦!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 15:23:29 | 显示全部楼层

不客气
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-7 16:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表