You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:54:06