C语言学习记录(十二)之字符串和字符串函数

一、字符串和字符串I/O

字符串和格式化输入/输出一节中我们讲过,字符串是以空字符 “ \0 ”结尾的char类型的数组。由于字符串十分常用,所以C提供了许多专门处理字符串的函数。下面详细讲述字符串的性值、如何声明并初始化字符串、在程序中输入和输出字符串以及如何操控字符串。

#include <stdio.h>

#define MSG "I LOVE C"
#define LARGE 40

int main(void){
   
    
    // 定义一个字符数组
    char words[LARGE] = "I am studying C";
    // 定义一个不能改变的字符串指针
    const char *Str1 = "that`s funny";
    // 打印以下信息
    puts("Some string display Here: ");
    puts(MSG);
    puts(words);
    puts(Str1);
    // 将words中的第8个元素改为P
    words[8] = 'P';
    puts(words);
    return 0;
}

和printf()函数一样,puts函数也属于stdio.h系列的输入/输出函数。但是,和printf()不同的是,puts()函数只显示字符串(不能打印数字),而且自动在显示的字符串末尾加上换行符。


1.1 定义字符串

在上面的程序中,有三种定义字符串的方式。分别是:

  1. 字符串字面量(字符串常量)
#define MSG "I LOVE C"
    puts(MSG);
  1. 字符串数组
#define LARGE 40
// 定义一个字符数组
char words[LARGE] = "I am studying C";
	// 输出字符串
    puts(words);
  1. 字符串指针
// 定义一个不能改变的字符串指针
const char *Str1 = "that`s funny";
puts(Str1);

1.1.1 字符串字面量(字符串常量)

用双引号括起来的内容称为字符串字面量(string literal),也叫做字符串常量。双引号中的字符和编译器自动加入末尾的 “ \0 ”字符,都作为字符串储存在内存中。

如果字符串字面量之间没有间隔或者用空白字符间隔,C会将其视为串联起来的字符串字面量

#include <stdio.h>

int main(void){
   

    char msg[50] = "Hello""World" "LOVE C";
    puts(msg); // 输出结果:HelloWorldLOVE C

    return 0;
}

等价于:

#include <stdio.h>

int main(void){
   

    char msg[50] = "HelloWorldLOVE C";
    puts(msg); // 输出结果:HelloWorldLOVE C

    return 0;
}

如果要在字符串中打印出双引号则需要加上转义符 “ \ ”。

#include <stdio.h>

int main(void){
   

    char msg[50] = "Hello \"World\" LOVE C";
    puts(msg); // 输出结果:Hello "World" LOVE C

    return 0;

}

字符串常量属于静态存储类别,说明如果在函数中使用字符串常量,该字符串只会被存储一次,在整个程序的生命周期内存在,即时函数被调用多次。


1.1.2 字符串数组和初始化

定义字符串数组时,必须让编译器知道需要多少空间。一种方法是用足够空间的数组存储字符串。如下:

const char str[20] = "I LOVE C";

const表示不会更改这个字符串。

上述初始化比标准数组初始化(下述程序)简单的多:

const char str[20] = {
   'I', ' ', 'L', 'O', 'V', 'E', ' ', 'C', '\0'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值