C语言二级指针数组存储字符串对的初始化与使用方法
二级指针数组的正确定义、初始化与使用方案
1. 正确初始化二级指针数组
你之前的写法报错是因为语法不匹配:char **tags_1[2]的每个元素是char**类型,需要指向一个char*数组的首地址,不能直接用嵌套的字符串字面量集合赋值。
两种可行的初始化方案:
方案1:先定义成对的一级指针数组,再赋值
// 分别定义每组成对的标签数组,每个元素是char*类型的字符串指针 char *pair_html[] = {"<html", "</html>"}; char *pair_head[] = {"<head", "</head>"}; // 二级指针数组,每个元素存储上述pair数组的首地址 char **tags_1[2] = {pair_html, pair_head};
方案2:用C99复合字面量直接初始化(无需单独定义pair数组)
char **tags_1[2] = { (char*[]){"<html", "</html>"}, (char*[]){"<head", "</head>"} };
初始化完成后的索引规则:
tags_1[i]指向第i对标签的一级指针数组首地址tags_1[i][0]是第i对的开标签(比如tags_1[0][0]就是"<html")tags_1[i][1]是第i对的闭标签(比如tags_1[0][1]就是"")
2. 常用操作示例
输出字符串
// 遍历输出所有标签对 for (int i = 0; i < 2; i++) { printf("第%d组:开标签=%s,闭标签=%s\n", i+1, tags_1[i][0], tags_1[i][1]); }
调用strncmp匹配标签
需先引入<string.h>头文件:
#include <string.h> // 匹配html开标签 if (strncmp(tags_1[0][0], "<html", 5) == 0) { printf("匹配到html开标签\n"); } // 匹配html闭标签 if (strncmp(tags_1[0][1], "</html>", 7) == 0) { printf("匹配到html闭标签\n"); }
修改字符串内容的注意事项
如果直接用字符串字面量初始化,字符串存储在只读内存段,直接修改会触发段错误。如果需要修改单个字符,需要把字符串存储在可写的栈/堆空间:
// 用栈空间存储可修改的字符串 char html_open[10] = "<html"; char html_close[10] = "</html>"; char *pair_html[] = {html_open, html_close}; char **tags_1[1] = {pair_html}; // 修改开标签的第三个字符为大写H tags_1[0][0][2] = 'H'; printf("修改后的开标签:%s\n", tags_1[0][0]); // 输出 <Html
内容的提问来源于stack exchange,提问作者user786
相关产品推荐
相关产品推荐

