C语言--第九章 字符串、字符和字节

9.1字符串基础

字符串是一种很重要的数据类型,但C语言中并没有显式的字符串数据类型,字符串以字符串常量的形式出现或存储于字符数组中。字符串就是一串零个或多个字符,并以一个位模式为全0的NUL(NUL也是’\0’)字节结尾。因此字符串内部不能出现NUL字节。NUL字节是字符串的终止符,但它本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节,但它本身占有内存。字符串常量就是被双引号括起来的一串字符串。例如,字符串常量:

"Hello"

在内存中占有6字节的空间,分别是H、e、l、l、o和NUL。

9.2 字符串长度

字符串的长度就是它所包含的字符的个数。C语言函数库为我们提供了很多字符串相关的函数供我们使用。

9.2.1 字符串长度strlen

size_t strlen ( const char * str );

函数strlen返回类型为size_t(无符号整数类型,定义在stddef.h中),字符串以’\0’作为结束标志,strlen返回的是’\0’之前的字符的个数,不包含’\0’本身。

#include <stdio.h> //比较字符串长度
int main()
{
 const char*str1 = "abcdef";
 const char*str2 = "bbb";
 if(strlen(str2)-strlen(str1)>0)
 {
 printf("str2>str1\n");
 } 
 else
 {
 printf("srt1>str2\n");
 }
 return 0;
}

9.3 不受限制的字符串函数

最常用的字符串函数都是不受限制的,也就是说它们只通过寻找字符串结尾的NUL字节来判断长度。

9.3.1 复制字符串strcpy

用于复制字符串的函数strcpy,它的原型如下:

char* strcpy(char * destination, const char * source );

这个函数是把源字符串source复制到目标字符串destination的函数。它返回一个指向目标字符串的指针。参数 destination 是目标字符串的指针,它指向要复制到的位置。参数 source 是源字符串的指针,它指向要复制的字符串。strcpy 函数会将源字符串中的字符逐个复制到目标字符串中,直到遇到空字符 \0,表示字符串的结束。
以下是一个实例:

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "Hello, world!";
    char destination[20];

    strcpy(destination, source);

    printf("Copied string: %s\n", destination);

    return 0;
}

以上代码将会输出:

Copied string: Hello, world!

注意:
1.由于destination参数会进行修改,因此它必须是个字符数组或者一个指向动态分配内存的数组的指针,不能是字符串常量。
2.在使用 strcpy 函数时,需要确保目标字符串 destination 的长度足够大,以容纳源字符串 source 的内容,否则可能会导致缓冲区溢出的问题。
考虑下面这个例子:

char message[] = "Original message";
...
if(...)
	strcpy(message,"Different");

原数组包含内容如下:
在这里插入图片描述
新数组包含内容如下:
在这里插入图片描述
从结果可以看出,第一个NUL之后的几个字符被覆盖了,所以在使用这个函数时要确保目标参数足以容纳源字符串。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值