首页 > 编程笔记 > C语言笔记

C语言定义字符串的2种方法(附带示例)

在C语言中,字符串是一种特殊的字符数组,以空字符'\0'结尾。C语言提供了两种主要的方式来定义字符串:使用字符数组和使用字符指针。让我们深入了解这两种方法,并简单对比它们的区别。

1. 使用字符数组定义字符串

字符数组是定义字符串最直接的方式。我们可以通过声明一个字符数组并为其赋值来创建字符串。这种方法为字符串分配了固定大小的内存空间。

定义字符数组的一般语法如下:

char 数组名[数组大小];

需要注意的是,数组大小应该至少比字符串长度大 1,以容纳结尾的空字符。

以下是使用字符数组定义字符串的几种方式:

// 方式 1:声明并初始化
char str1[] = "Hello, World!";

// 方式 2:先声明,后赋值
char str2[20];
strcpy(str2, "Hello, World!");

// 方式 3:逐个字符初始化
char str3[] = {'H', 'e', 'l', 'l', 'o', '\0'};

// 方式 4:声明指定大小的数组并初始化
char str4[20] = "Hello, World!";

需要注意的是,当我们使用字符数组定义字符串时,编译器会自动在字符串末尾添加空字符 '\0'。例如,在方式 1 中,虽然我们只写了 13 个字符,但实际上数组的大小是 14,因为编译器自动添加了结束符。


在方式 2 中,我们使用 strcpy() 函数来为已声明的字符数组赋值,这是因为 C 语言不允许直接用赋值运算符=给数组赋值。


方式 3 展示了如何逐个字符初始化字符串。在这种情况下,我们需要手动添加结束符 '\0'。
 

方式 4 演示了如何声明一个指定大小的字符数组并初始化。这种方法允许我们为字符串预留额外的空间,以便日后可能的修改操作。

2. 使用字符指针定义字符串

使用字符指针定义字符串是另一种常见的方法,这种方法实际上是创建一个指向字符串字面量的指针。字符串字面量通常存储在程序的只读数据段中,这意味着我们不能直接修改它的内容。


定义字符指针的一般语法如下:

char *指针名 = "字符串内容";

以下是使用字符指针定义字符串的几种方式:

// 方式 1:声明并初始化
char *str1 = "Hello, World!";

// 方式 2:先声明,后赋值
char *str2;
str2 = "Hello, World!";

// 方式 3:使用 const 关键字(推荐)
const char *str3 = "Hello, World!";

使用字符指针定义字符串时,指针变量存储的是该字符串的起始地址;也就是说,指针指向了字符串。
 

方式 3 中使用 const 关键字明确表示该字符串是只读的,这是一种良好的编程习惯,可以防止意外修改字符串内容。

两种定义方式的区别

简单对比字符数组和字符指针定义字符串的区别:


最后,让我们通过一个综合示例来演示这两种定义字符串的方法及其用法:

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

int main() {
    // 使用字符数组定义字符串
    char fruit[10] = "Apple";
    printf("Original fruit: %s\n", fruit);

    // 修改字符数组中的字符串
    strcpy(fruit, "Banana");
    printf("Modified fruit: %s\n", fruit);

    // 使用字符指针定义字符串
    char *color = "Red";
    printf("Original color: %s\n", color);

    // 改变指针指向的字符串
    color = "Blue";
    printf("New color: %s\n", color);

    return 0;
}

输出结果:

Original fruit: Apple
Modified fruit: Banana
Original color: Red
New color: Blue

这个示例展示了字符数组和字符指针定义字符串的不同用法。我们可以直接修改字符数组 fruit 的内容,而对于字符指针 color,我们只能改变它指向的字符串,而不能修改字符串本身的内容。这个例子很好地说明了两种方法的特点和使用场景。

相关文章