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类型数组。分析和另一篇数组博客说的一样。

发布了168 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41683305/article/details/104644189
今日推荐