零基础C语言入门022——字符串函数(字符串数组和字符串函数可以放后面学)

本文介绍了C语言中字符串的表示方法,包括字符串常量和字符数组,并详细讲解了常用的字符串处理函数,如strlen、strcpy、strncpy、strcat、strncat以及strcmp和strncmp,强调了使用这些函数时的注意事项和提高编程效率的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 字符数组

C 语言是没有字符串类型的。那它是如何存放和表示字符串的呢?两种方式——字符串常量以及字符类型的数组。
字符串常量:“FishC”,“小甲鱼”,“鱼C工作室”
字符数组:
可以先定义指定长度的字符数组,然后再给每个元素单独赋值:

int main
{
    char str[10];

    str[0] = 'F';
    str[1] = 'i';
    str[2] = 's';
    str[3] = 'h';
    str[4] = 'C';
    str[5] = '\0';

    ……
}

还可以直接在定义的时候对字符数组进行初始化,这样会方便很多:

int main
{
    // 初始化字符数组的每个元素
    char str1[10] = {'F', 'i', 's', 'h', 'C', '\0'};
   
    // 可以不写元素的个数,因为编译器会自动计算
    char str3[] = {'F', 'i', 's', 'h', 'C', '\0'};
   
    // 使用字符串常量初始化字符数组
    char str4[] = {"FishC"};
   
    // 使用字符串常量初始化,可以省略大括号
    char str5[] = "FishC";
}
  1. 字符串处理函数

在实际开发中,你经常会听到大牛说“避免重新造轮子”。如果能用得上官方提供的现成的函数,尽量不要自己去写,这样除了能够大幅度提供工作效率外,也会使你的程序更加稳定和快速。
获取字符串的长度:strlen 函数
拷贝字符串:strcpy 函数和 strncpy 函数
连接字符串:strcat 函数和 strncat 函数
比较字符串:strcmp 函数和 strncmp 函数

strlen函数

//字符串中反斜杠0的意义,strlen获取长度(字符个数),sizeof获取尺寸(占用字节)
#include <stdio.h>
#include <string.h>
int main(void)
{
	char str[] = "fangxu";
	str[4] = '\0';
	printf("%s\n", str);
	printf("lenght=%d\n",sizeof(str));
	printf("lenght=%d\n",strlen(str));
	system("pause")
	return 0;
}

拷贝字符串:strcpy 函数和 strncpy 函数
要保证拷贝内容长度不能超过目标,不能把长的拷贝到短的。会报错
下例如果是strcpy(str2,str1)就会报错

//strcpy函数演示
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[] = "original string";
	char str2[] = "new string";
	strcpy(str1, str2);
	printf("%s\n", str1);
	printf("%s\n", str2);
	system("pause")
	return 0;
}
//strncpy函数与strcpy的不同
//strncpy可添加参数限制拷贝内容长度。末尾要我们手动添加结束符。
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[] = "To be or not to be";
	char str2[40] ;
	strncpy(str2, str1,5);/*这里的5限制拷贝内容的长度*/
	str2[5] = '\0';/*strncpy没有把结束符\0拷过来,需要我们手动添加*/
	printf("%s\n", str2);
	system("pause")
	return 0;
}

连接字符串:strcat 函数和 strncat 函数

//strncat函数
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[100] = "I love";/*目标数组要指定长度,且不能小于最终长度*/
	char str2[] = "fishc.com";
	strcat(str1, " ");/*拷贝内容可以是变量,也可以双引号内加具体字符数组*/
	strcat(str1, str2);
	printf("%s\n", str1);
	system("pause")
	return 0;
}

strncat同样的,也可添加参数限制拷贝内容长度。末尾也要我们手动添加结束符。

比较字符串:strcmp 函数和 strncmp 函数

//strcmp函数
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[] = "fangxu";
	char str2[] = "fangxu";
	if (!strcmp(str1, str2))/*对比两个函数asc码,如果完全一致就返回1,取反就为0*/
	{
		printf("两个字符串完全一致\n");
	}
	system("pause")
	return 0;
}

strncmp函数可以设置参数,只对比前面n个字符

数组之间的赋值:
//数组a部分赋值给数组b
#include<stdio.h>
int main(void)
{
    int a[5]={1,2,3,4,5};
    int b[3];
    int i=0;
    for(i=0;i<5;i++)
    {
        b[i]=a[i+2];//数组a后三个元素赋值给数组b
    }
    printf("%d,%d,%d\n",b[0],b[1],b[2]);
    system("pause")
    return 0;
}
//数组a部分赋值给数组b
#include<stdio.h>
int main(void)
{
    int a[5]={1,2,3,4,5};
    int b[5];
    memcpy(b,a,sizeof(int)*5);//函数前两个参数表面是数组名,等价于数组第一个元素地址。
    printf("%d,%d,%d,%d,%d\n",b[0],b[1],b[2],b[3],b[4]);
    system("pause")
    return 0;
}
//数组a部分赋值给数组b
#include<stdio.h>
int main(void)
{
    int a[5]={1,2,3,4,5};
    int b[3];
    memcpy(b,&a[2],sizeof(int)*3);//前两个参数是地址
    printf("%d,%d,%d\n",b[0],b[1],b[2]);
    system("pause")
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值