一、字符串
在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]);}//freefor (int i = 0; i < 5; i++){free(strArray[i]);}return 0;
}
strArray是一个指针数组,每个元素都指向一个字符串字面量。这种方法更灵活,因为字符串的长度可以不同,但所有字符串都必须是静态量或动态分配的(例如使用malloc)。
注意事项:
1、使用字符数组时,要确保不超出数组的边界,否则会导致未定义行为。
2、使用指针数组时,要确保字符串的生命周期,避免悬挂指针(即指向已释放内存的指针)。
3、动态分配内存时,记得在程序结束时释放内存(使用free函数)。