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
的空终止字符。