迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

C 语言中的字符串数组

作者:迹忆客 最近更新:2023/03/30 浏览次数:

本文将演示关于如何在 C 语言中声明一个字符串数组的多种方法。


使用二维数组符号在 C 语言中声明字符串数组

C 语言中的字符串只是存储在连续内存区域中的字符序列。关于字符串的一个区别是,在序列的最后存储了一个终止的空字节/0,表示一个字符串的结束。如果我们用 [] 符号声明一个固定的 char 数组,那么我们就可以在该位置存储一个由相同数量的字符组成的字符串。

需要注意的是,在将字符字符串复制到数组位置时,应该考虑多出一个终止空字节的字符空间。因此,可以用括号符号声明一个二维的 char 数组,并利用它作为字符串的数组。数组的二维将限制字符串的最大长度。在这种情况下,我们任意定义一个宏常量-MAX_LENGTH 等于 100 个字符。整个数组可以用 {""} 符号初始化,将数组中的每个 char 元素清零。当在已经初始化的数组中存储字符串值时,不允许使用赋值运算符,应使用特殊的内存复制函数,如 strcpy

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

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main(){

    char arr[NUM_STRINGS][MAX_LENGTH] = {""};

    arr2[0] = "string literal"; // Not permitted
    strcpy(arr[0], "hello world");
    printf("%s\n", arr[0]);
    printf("%s\n", strcpy(arr[0], "hello world"));

    exit(EXIT_SUCCESS);
}

输出:

hello world
hello world

另外,我们也可以在声明二维字符数组时立即初始化。现代 C11 标准允许用字符串字元初始化 char 数组,甚至当数组长度大于字符串本身时,可以自动在字符串末尾存储空字节。初始化列表的符号与 C++ 语法类似。每一个大括号的元素都应该存储在一个长度为 MAX_LENGTH 的连续内存区域。如果初始化器符号指定的元素少于数组大小,那么剩余的元素将被隐式初始化为\0 字节。

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

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main(){
    char arr2[NUM_STRINGS][MAX_LENGTH] = { {"first string"},
                                          {"second string"},
                                          {"third string"},
                                          {"fourth string"},
                                          {"fifth string"} };

    for (int i = 0; i < NUM_STRINGS; ++i) {
        printf("%s, ", arr2[i]);
    }

    exit(EXIT_SUCCESS);
}

输出:

first string, second string, third string, fourth string, fifth string, , , , , ,

在 C 语言中使用 char*数组符号来声明字符串数组

char*是通常用于存储字符串的类型。声明 char*的数组,我们就可以得到固定数量的指针,指向相同数量的字符串。它可以用字符串字元初始化,如下面的例子所示,也可以使用头 <string.h> 中提供的特殊函数分配或复制。

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

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main(){
    char *arr3[NUM_STRINGS] = { "first string",
                                "second string",
                                "third string",
                                "fourth string",
                                "fifth string" };
    char* str1 = "string literal";
    arr3[8] = str1;
    arr3[9] = "hello there";

    for (int i = 0; i < NUM_STRINGS; ++i) {
        printf("%s, ", arr3[i]);
    }
    printf("\n");

    exit(EXIT_SUCCESS);
}

输出:

first string, second string, third string, fourth string, fifth string, (null), (null), (null), string literal, hello there,

另一种选择是,我们可以只指定 {} 括号,这将使数组中的指针初始化为 null,它们可以在以后用于存储其他字符串地址,或者程序员甚至可以分配动态内存。

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

#define NUM_STRINGS 10

int main(){
    char *arr4[NUM_STRINGS] = {};
    for (int i = 0; i < NUM_STRINGS; ++i) {
        printf("%s, ", arr4[i]);
    }
    printf("\n");

    exit(EXIT_SUCCESS);
}

输出:

(null), (null), (null), (null), (null), (null), (null), (null), (null), (null),

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便