C和汇编----字符串

字符串是以空字符(\0)结尾的char类型数组。

0x01 定义字符串和初始化

用双引号括起来的内容称为字符串字面量,也叫字符串常量,双引号中的字符串和编译器自动加入\0字符,都作为字符串存储在内存中

#include "stdio.h"

int main()
{
	char string[]="hello deng";
	return 0;

}

反汇编我们可以看到,hello deng的内容已经在另一个位置,首先给string一个地址,然后将hello deng复制到以string为首地址的内存中

5:        char string[]="hello deng";
00401028 A1 1C 20 42 00       mov         eax,[string "hello deng" (0042201c)]
0040102D 89 45 F4             mov         dword ptr [ebp-0Ch],eax
00401030 8B 0D 20 20 42 00    mov         ecx,dword ptr [string "hello deng"+4 (00422020)]
00401036 89 4D F8             mov         dword ptr [ebp-8],ecx
00401039 66 8B 15 24 20 42 00 mov         dx,word ptr [string "hello deng"+8 (00422024)]
00401040 66 89 55 FC          mov         word ptr [ebp-4],dx
00401044 A0 26 20 42 00       mov         al,[string "hello deng"+0Ah (00422026)]
00401049 88 45 FE             mov         byte ptr [ebp-2],al
6:        return 0;
0040104C 33 C0                xor         eax,eax

在这里插入图片描述
从下图可以看出,字符串在内存中的确以\00结尾,并且字符在内存存储的是字符的ASCII值,所以在指定数组大小时,要确保数组的元素个数至少比字符串长度多1,所有未被使用的元素都被自动化初始化为\00
在这里插入图片描述

0x02 指针和字符串

字符串是以空字符(\0)结尾的char类型数组。分析和另一篇数组博客说的一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值