首先strlen 是函数sizeof 是运算操作符二者得到的结果类型为 size_t即 unsigned int 类型。大部分编译程序在编译的时候就把 sizeof 计算过了而 strlen 的结果要在运行的时候才能计算出来。
对于以下语句
char *str1 = "asdfgh";char str2[] = "asdfgh";char str3[8] = {'a', 's', 'd'};char str4[] = "asdf";
执行结果是
sizeof(str1) = 4; strlen(str1) = 6;sizeof(str2) = 7; strlen(str2) = 6;sizeof(str3) = 8; strlen(str3) = 3;sizeof(str4) = 6; strlen(str4) = 2;
str1是字符指针变量sizeof 获得的是该指针所占的地址空间32 位操作系统对应 4 字节所以结果是 4strlen 返回的是该字符串的长度遇到 结束 本身不计算在内故结果是 6。
str2 是字符数组大小由字符串常量 "asdfgh" 确定sizeof 获得该数组所占内存空间大小包括字符串结尾的 所以结果为 7strlen 同理返回 6。str3 也是字符数组但大小确定为 8故 sizeof 得到的结果是 8strlen 统计 之前所有字符的个数即为 3
str4 是常量字符数组sizeof 得到字符总数即 6strlen 计算至 结束因此返回 2
总结一句就是 sizeof 计算的是变量的大小而 strlen 计算的是字符串的长度前者不受字符 影响后者以 作为长度判定依据。
原文地址https://blog.csdn.net/shudaxia123/article/details/47753505
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题