转移字符----sizeof & strlen

在定义了数组大小时:

sizeof是运算符,表示编译时分配的空间大小,即数组定义的大小,char t[20] = "sfa"。sizeof: 20; strlen: 3.
未定义数组大小

sizeof根据实际位数确定,注意字符串隐藏的\0也算一位。
char s[] = "a\128\\\tcb\xdg\n";
sizeof计算s大小时,为11位:a \12 8 \\ \t c b \xd g \n \0
strlen计算s大小时,为10位:strlen计算字符串长度时遇\0结束,但大小计算不包括\0

char a[] = "a0\0a0\0";
sizeof(a)大小为7,即:a 0 \0 a 0 \0 \0
strlen(a)大小为2

char s[] = "a\128\\\tcb\xdg\n";   打印字符数组s:转义字符:
\yyy   : 1~3位八进制数所代表的任意字符,其中y的范围是0~7
\xyy   : 1~2位十六进制所代表的任意字符,其中y的范围是0~F

for (int i = 0; i < sizeof(s); i++)
{
     printf("%c", s[i]);
}
a
8\    cb
g

\12 : 2位八进制数,十进制10,控制字符LF,表示换行,换到下一行开始

\\ :表示 \

\t :  表示水平制表,即一个TAB

\xd: 1位十六进制数,十进制13,控制字符CR,表示回车

注意转译字符 八进制和十六进制的问题:

char s[] = "a\12345b\x1221g\xay";

八进制最多选3位,即\123,当该八进制数转化为十进制后大于ASCII码表最大值127时,是一个乱码。

十六进制最多选两位,但截取\x后的整数的最后2位处理,前面的位数丢弃,即截断,即丢弃12,十六进制\x21,十进制33表示!

所以长度计算中:

sizeof是10位,即:a \123 4 5 b \x21 g \xa y \0

strlen是9位,即:a \123 4 5 b \x21 g \xa y

原文地址:https://www.cnblogs.com/Lunais/p/9767139.html

时间: 2024-11-05 17:31:39

转移字符----sizeof & strlen的相关文章

sizeof/strlen/length

1.sizeof() sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小. 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系. 具体而言,当参数分别如下时,sizeof返回的值表示的含义如下: 数组—

sizeof strlen 详解

详解sizeof和strlen 1 说明sizeof和strlen之间的区别 (1)sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsinged int类型.该类型保证     能容纳实现所建立的最大对象的字节大小. (2)sizeof是算符,strlen是函数. (3)sizeof可以用类型作参数,sizeof还可以用函数作参数. strlen只能用char*作参数,且必须是以'\0'结尾的.比如: short f(); printf("%d\n",si

C++字符串与转移字符

先看以下代码: #include<iostream> #include<string> using namespace std; int main() { string str1("[\t]"); cout << str1 << endl; cout << "[\t]" << endl; cout << "[ ]" << endl;//[]里边有7个空

python之转移字符(学习笔记三)

python之转移字符(学习笔记三) 转义字符 \ 可以转义很多字符,比如 \n 表示换行, \t 表示制表符,字符 \ 本身也要转义,所以 \\ 表示的字符就是 \ ,可以在Python的交互式命令行用print打印字符串看看: 命令: >>>print 'he\'s a boy.' >>>print 'I\'m learning\nlinux.' >>>print '\\\n\\' 截图: 如果字符串里面有很多字符都需要转义,就需要加很多 \ ,为

c/c++ 强制去掉转移字符的办法 以及 仿函数

#include<iostream>#include<functional> using namespace std;using namespace std::placeholders; //去掉转移字符的方法void main(){ //比如我门要打开qq //第一种 string str = "C:\Program Files\QQ\Bin\QQ.exe"; system(str.c_str()); //有转移字符的存在是不是很蛋疼呢 //接下来我们强制去掉

sizeof &amp;&amp; strlen 的区别

本文主要记录了 sizeof 操作符 和 strlen() 函数的区别,以及各自的用途.(在下才疏学浅,发现错误,还请留言指正) sizeof 和 strlen 的区别 示例代码如下: #include<stdio.h> int main() { char str[20]="0123456789"; printf("strlen(str)==%d\n",strlen(str));//计算字符串的长度(不包括0x00),结果:10 printf("

转移字符

今天看到这个 out.println("open(\"jd.jsp\",\"_self\")"); 其中open中 这个\"\"不是很明白 求详细的说一下 \"这个是转义字符,用来表示双引号["],因为在java中两个双引号之间的部分表示为字符串,就好比123是int,但是"123"就是字符串.那么现在回到你的问题,机器不能理解人的意思,如果不是用\",它会认为"op

sizeof, strlen区别

strlen与sizeof的区别 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型. 该类型保证能容纳实现所建立的最大对象的字节大小. 2.sizeof是算符,strlen是函数. 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的. 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了. 5.大部分编译程序在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是siz

sizeof strlen strncpy

sizeof测类型(数组名除外) strlen测实际长度 strncpy返回指针类型 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int main() 5 { 6 char *p="wangddd"; 7 printf("%d\n",sizeof(p));//输出4,指针类型 8 9 char x[8]; 10 printf("%d