C语言—字符数组和字符串

1 字符数组

#include<stdio.h>
#include <string.h>
int main() {
	char arr[] = { 'h','e','l','l','o' };
	int len1 = sizeof(arr); // sizeof(arr[0]); //正确,求字符数组的长度
	int len2 = strlen(arr);  //错误,产生一个随机数
	printf("%d\n", len1);   // len1 = 5
	printf("%d\n", len2);   
}

2 字符串

#include<stdio.h>
#include <string.h>
int main() {
	char arr[] = "hello"; // 自动在末尾增加一个'\0
	int len1 = sizeof(arr) / sizeof(arr[0]);
	int len2 = strlen(arr); // 求有效字符个数,遇到'\0'停止

	printf("%d\n", len1);//len1 = 6,算上了'\0'
	printf("%d\n", len2);//len2 = 5
}

3 字符数组和字符串的再认识

1、字符数组,就是字符类型的数组。字符数组不一定是字符串。
2、字符串是最后一个字符为’\0’的字符数组。字符串一定是字符数组。
3、字符数组的长度是固定的,其中任何一个字符都可以为’\0’。
4、字符串只能以’\0’结尾,其后的字符便不再属于该字符串。
5、strlen()对字符串完全适用,对不是字符串的字符数组不适用。

4 字符串操作函数

比较/部分比较

strcmp() / strncmp() :相等返回0,不相等返回1

#include<stdio.h>
#include <string.h>
int main() {
	char arr[] = "hello";
	char brr[] = "hell0";
	int flag1 = strcmp(arr, brr); //等价于int flag1 = strcmp("hello", "hell0");
	int flag2 = strncmp(arr, brr, 3); //前三个字符进行比较
	printf("%d\n", flag1);  //1
	printf("%d\n", flag2);  //0
}

拷贝/部分拷贝

strcpy() / strncpy()

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>
int main() {
	char arr[] = "hello";
	char brr[10]={0};
	char crr[10]={0};
	strcpy(brr, arr);//等价于strcpy(brr, "hello");
	strncpy(crr, arr, 3);
	printf("%s\n", brr);	//hello
	printf("%s\n", crr);	//hel
}

链接/部分链接

strcat() / strncat()

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>
int main() {
	char arr[20] = "hello";
	char crr[20] = "hello";
	char brr[] = " world";
	
	strcat(arr, brr);
	strncat(crr, brr, 3);
	
	printf("%s\n", arr);//hello world
	printf("%s\n", crr);//hello wo
}

5 字符串输入、输出函数

scanf() 和 printf()

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>
int main() {
	char arr[128] = { 0 };
	scanf("%s", &arr);
	printf("%s\n", arr);
}

在这里插入图片描述

scanf(“%s”,&arr)与get_s(arr)区别:如下图,scanf()不允许含有空格,get_s()允许含有空格。

在这里插入图片描述

gets_s() 和 puts()

#include<stdio.h>
#include <string.h>
int main() {
	char arr[128];
	gets_s(arr);
	puts(arr);
}

在这里插入图片描述

fgets()和fputs()

#include<stdio.h>
#include <string.h>
int main() {
	char arr[128];
	fgets(arr,128,stdin);
	fputs(arr, stdout);
}

在这里插入图片描述

sscanf()和sprintf()

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
	int n1=0;
	int n2=456;
	char arr[128]="123";
	char brr[128]; 
	sscanf(arr, "%d", &n1);//将字符串类型的arr以整数形式输入到n1中(从左往右)
	sprintf(brr, "%d", n2);//将int型的n2以字符串的形式输入到brr中(从右往左)
	printf("%d\n", n1);    //123
	printf("%s\n", brr);    //456
}

6 memset()函数

memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值,这个函数通常为新申请的内存做初始化工作。即:作用是在一段内存中填充某个给定的值,是对较大的结构体或数组进行清零操作的一种最快方法。

#include<stdio.h>
#include <corecrt_memory.h>

int main() {
	int arr[5];
	int i;
	memset(arr, 0, sizeof(arr));
	for (int i = 0; i < 5; i++) {
		printf("%3d", arr[i]);
	}
	printf("\n");
	memset(arr, -1, sizeof(arr));
	for (int i = 0; i < 5; i++) {
		printf("%3d", arr[i]);
	}
}

在这里插入图片描述

注意:memset函数按字节对内存块进行初始化,所以它不能将int数组初始化为0和-1之外的其他值。赋其他的数据时,会出现错误。如下:

memset(arr, 1, sizeof(arr));
	for (int i = 0; i < 5; i++) {
		printf("%d ", arr[i]);
	}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值