sizeof() 用法汇总

sizeof()用法汇总

sizeof()功能:计算数据空间的字节数 。

1.与strlen()比较

strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为’\0’的数组元素。

而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。

2.指针与静态数组的sizeof操作

指针均可看为变量类型的一种。

所有指针变量的sizeof 操作结果均为4。

注意:
char *p; sizeof(p) = 4; 
sizeof(*p) == 1; //相当于sizeof(char);   
补充以下(本人遇到的情况):
/*-----------------------------------------------
// FileName:    ${filename}.cpp
// NewFile:     dhs347 2020/8/30 19:37:36
// LogFile:     dhs347 2020/8/30 19:37:36
// E-mail:      dhs3447@163.com
// Functions:    

880. 索引处的解码字符串
给定一个编码字符串 S。为了找出解码字符串并将其写入磁带,从编码字符串中每次读取一个字符,并采取以下步骤:
如果所读的字符是字母,则将该字母写在磁带上。
如果所读的字符是数字(例如 d),则整个当前磁带总共会被重复写 d-1 次。
现在,对于给定的编码字符串 S 和索引 K,查找并返回解码字符串中的第 K 个字母。

示例 1:
输入:S = "leet2code3", K = 10
输出:"o"
解释:
解码后的字符串为 "leetleetcodeleetleetcodeleetleetcode"。
字符串中的第 10 个字母是 "o"。
示例 2:
输入:S = "ha22", K = 5
输出:"h"
解释:
解码后的字符串为 "hahahaha"。第 5 个字母是 "h"。
示例 3:
输入:S = "a2345678999999999999999", K = 1
输出:"a"
解释:
解码后的字符串为 "a" 重复 8301530446056247680 次。第 1 个字母是 "a"。

提示:
2 <= S.length <= 100
S 只包含小写字母与数字 2 到 9 。
S 以字母开头。
1 <= K <= 10^9
解码后的字符串保证少于 2^63 个字母。

// Descriptions: 索引处的解码字符串
// Copyright (C) 2020 dhs347 All rights are reserved.
-----------------------------------------------*/

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

#define _CRT_SECURE_NO_WARNINGS

char lenofchars(char *ch) //参数可以是不定长数组或指针 
{
	char count = 0;
	while (*ch++)
		count++;

	return count;
}

int chars_is_nums(char c)
{
	if (c >= '2' && c <= '9')
		return 0;

	return 1;
}


int chars_is_char(char c)
{
	if (c >= 'a' && c <= 'z')
		return 0;

	return 1;
}

char * __strcat(char* p_str1, const char* p_str2)
{
	//char j = 0;
	char len = lenofchars(p_str1);
	char *tmp = p_str1;
	tmp += len;

	while (*tmp++ = *p_str2++)
		;

	return tmp;
}

char search_chars(char *S, int K)
{
	return S[K - 1]; 
}

char  ch[]  = "dhs347 ";
char  *cht = "is OK !";
char  *cBuffer = NULL;

int main(int argc, char *argv[]) {
    
	int K = 5;
	printf("sizeof(ch) = %d\n", sizeof(ch));
	__strcat(ch, cht); 
	//strcat(ch, cht);

	puts(ch);
	printf("strlen(ch) = %d\n", strlen(ch));
	printf("sizeof(ch) = %d\n", sizeof(ch));

	printf("————————————————————————————————————\n");
	printf("sizeof(ch) = %d\n", sizeof(ch));
	__strcat(ch, "dff");
	puts(ch);
	printf("strlen(ch) = %d\n", strlen(ch));
	printf("sizeof(ch) = %d\n", sizeof(ch));
    
    //printf("strlen(ch) = %d\n", strlen(cht)); 不能计算指针类型长度
    
    return 0;
}

结果:

sizeof(ch) = 8
dhs347 is OK !
strlen(ch) = 14
sizeof(ch) = 8
————————————————————————————————————
sizeof(ch) = 8
dhs347 is OK !dff
strlen(ch) = 17
sizeof(ch) = 8
请按任意键继续. . .

结论:

strlen()计算字符数组的字符数时,直到遇到"\0"时结束计算,且不计算为’\0’的数组元素。

sizeof()计算数据(包括数组、变量、类型、结构体等)所占的合法内存空间

int puts( const char *str );

puts()输出每个来自在空终止字符之前的字符串 str 的字符并附加换行符 ‘\n’ 到输出流 stdout ,如同重复执行 putc 写入。不写入来自 str 的空终止字符。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值