C语言定义字符串数组

一、字符串

在C语言中,字符串数组是一种存储多个字符串的数组。每个字符串本身是一个字符数组,以空字符(\0)结尾。

二、定义字符串数组

2.1 字符数组组成的数组

这种方式可以存储固定长度的字符串。示例:

//存储5个字符串,每个字符串最多有20个字符(包括空字符)
#include <stdio.h>
#include <string.h>

int main(void) 
{
    char strArray[5][20];  // 定义一个5x20的字符数组

    // 初始化字符串数组
    strcpy(strArray[0], "Hello");
    strcpy(strArray[1], "World");
    strcpy(strArray[2], "C Language");
    strcpy(strArray[3], "Programming");
    strcpy(strArray[4], "is Fun");

    // 打印字符串数组
    for (int i = 0; i < 5; i++)
     {
        printf("%s\n", strArray[i]);
    }

    return 0;
}

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

int main(void) 
{
  char strArray[5][20] =
   {
    "Hello\0\0\0\0\0\0\0\0\0\0\0\0", // 注意:这里手动添加了空字符和填充字符,实际上不需要这么多,只是为了说明
    "World\0",
    "C Lang\0", // 注意:这里"C Language"被截断为"C Lang",以适应数组大小
    "Progra\0", // "Programming"被截断为"Progra"
    "is Fun\0"
	};

    // 打印字符串数组
    for (int i = 0; i < 5; i++)
     {
        printf("%s\n", strArray[i]);
    }

    return 0;
}

在这里插入图片描述
strcpy函数用于将字符串复制到字符数组中。strArray是一个二维数组,其中strArray[i]是一个长度为20的字符数组(字符串)。

2.2 指针数组

这种方式可以存储长度不固定的字符串。

//存储5个字符串,但它们的长度是未知的
#include <stdio.h>
#include <string.h>

int main(void) 
{
    const char *strArray[5];  // 定义一个指针数组

    // 初始化字符串数组
    strArray[0] = "Hello";
    strArray[1] = "World";
    strArray[2] = "C Language";
    strArray[3] = "Programming";
    strArray[4] = "is Fun";

    // 打印字符串数组
    for (int i = 0; i < 5; i++)
     {
        printf("%s\n", strArray[i]);
    }

    return 0;
}
#include <stdio.h>
#include <string.h>

int main(void) 
{
    const char *strArray[5] = 
    {
    "Hello",
    "World",
    "C Language",
    "Programming",
    "is Fun"
	};

    // 打印字符串数组
    for (int i = 0; i < 5; i++)
     {
        printf("%s\n", strArray[i]);
    }

    return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) 
{
     char *strArray[5];  // 定义一个指针数组

    // 初始化字符串数组
    strArray[0] = (  char *)malloc(strlen( "Hello"));
    strArray[1] = (  char *)malloc(strlen( "World")); 
    strArray[2] = (  char *)malloc(strlen( "C Language")); 
    strArray[3] = (  char *)malloc(strlen(  "Programming"));
    strArray[4] = (  char *)malloc(strlen( "is Fun")); 
    
    strcpy(strArray[0], "Hello");
    strcpy(strArray[1], "World");
    strcpy(strArray[2], "C Language");
    strcpy(strArray[3], "Programming");
    strcpy(strArray[4], "is Fun");

    // 打印字符串数组
    for (int i = 0; i < 5; i++)
     {
        printf("%s\n", strArray[i]);
    }
    //free
      for (int i = 0; i < 5; i++)
     {
        free(strArray[i]);
    }

    return 0;
}

在这里插入图片描述
strArray是一个指针数组,每个元素都指向一个字符串字面量。这种方法更灵活,因为字符串的长度可以不同,但所有字符串都必须是静态量或动态分配的(例如使用malloc)。
注意事项
1、使用字符数组时,要确保不超出数组的边界,否则会导致未定义行为。
2、使用指针数组时,要确保字符串的生命周期,避免悬挂指针(即指向已释放内存的指针)。
3、动态分配内存时,记得在程序结束时释放内存(使用free函数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值