嵌入式学习的第八天-字符数组

一、字符数组

1.字符串的存储
  • 连续性:存放空间使连续的,数组在内存中存储相邻元素之间无断点
  • 有序性:取地址时元素下标越大地址越小
  • 单一性:数组中说有元素的类型必须相同
2.字符串数组的定义

        char 数组名 [元素个数]

:末尾加 \0,字符串的结束标志

3.字符型数组的初始化

(1)全部初始化

        char s[6] = "hello";

 (2)局部初始化

       char s[6] = "he";

        没有给定初值的元素,其初始化值为0

(3)默认初始化:可省列表维度

         char s[] = "hello";

 注:1)字符型数组s为一个容器,s[100]代表总容器为100,"hello"占六个字节,含义为字符数组里

        有一个字符串,  s[]="hello",s[6]会产生字符串的越界访问

        2)数组不能被整体引用

4.字符串的遍历
#include <stdio.h>

int main(void)
{
	char s[100] = "Hello";
/*
	int i = 0;
	while(s[i] != '\0')
	{
		putchar(s[i]);
		++i;
	}
/*
    put(s);
	printf("\n");

	return 0;
}

注:

  • 0 :int型 数字0  4字节
  • '0':char型  ASCII-48号 1字节
  • '\0':下、字符型 ASCII-0号 1字节
  • “0”:字符串0 1字节
  • " " : \0 
4.字符串的输入和输出

(1)字符串的输入 : gets(s);

(2)字符串的输出 :  puts(s)、scanf("%s",s)、fgets(s);

:1)sanf无法接收带' '和'\n'的字符串,gets可以接收带' '的字符串,遇到'\n'会停止

       2)fgets不会产生越界,只会截取数组里的有效长度

二、字符串的常见操作

1.获得字符串的长度:strlen 
#include <stdio.h>
#include <string.h>
int main(void)
{	
	char s[100] = "Hello World!";
/*	int counter = 0;
	int i = 0;

	while(s[i])
	{
		++counter;
		++i;
	}
	printf("%d\n",counter);
*/
	printf("%lu\n",strlen(s));
	printf("%lu\n",sizeof(s));
	return 0;
}
  • sizeof为容量,其中sizeof=100;
  • strlen有效长度,及从开头到\0中间元素的个数,其中strlen=12;
2.字符串的拷贝:strcpy(dst,str);

:目的空间一定要能够存放的下源字符,目的空间的大小最少为 strlen-1

3.字符串的拼接:strcat(s1,s2);

:目的空间一定要能够放下拼接后的字符串,目的空间的大小最少为 strlen s1 +strlen s2+1

4.字符串的比较:strcmp(s1,s2);

:1)两个字符串从左向右依次比较,第一个不相同值的ASCII值大的字符串就大

        2)两字符串相同返回0,如果s1>s2,返回>0的值,如果s1<s2,返回<0的值,此处值为转换

              为ASCII的差值 

三、例题

       实现一个类似itoa函数的功能,将一个整型数据转换为字符串。例如n = 1234, 转换的结果存放

到一个字符数组中char s[100], 输出s后得到"1234".

​#include<stdio.h>
#include<string.h>
int main(void)
{
	int i = 1234;
	char s[100];
	int j = 0;

	while(i != 0)
	{
		s[j] = i % 10 + '0';
		i = i / 10;	
		++j;
	}
	s[j] = '\0';

	int len = strlen(s);

	for(i = 0;i < len / 2;++i)
	{
		char tmp;
		tmp = s[i];
		s[i] = s[len - i - 1];
		s[len - i - 1] = tmp;
	}
	puts(s);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值