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

能否用char**存储字符串列表?C语言新手代码疑问求解

关于char**存储字符串列表的解释

首先明确:char 是指向字符指针的指针,用来存储字符串列表时,它指向的是一个 char* 类型的数组(每个元素都是字符串的首地址)。

你的代码里,rightArray 应该是一个字符指针数组(比如 char* rightArray[3];),这样才能存三个字符串的地址。你觉得 char** testRights = rightArray; 只拿到第一个元素,其实是误解:

  • 当你把数组名 rightArray 赋值给 char** 类型变量时,数组名会隐式转换成指向数组第一个元素的指针(也就是 char** 类型,因为数组元素是 char*)。此时 testRights 和 rightArray 指向同一个起始位置,并不是只拿到第一个元素。
  • 如果你直接用 printf("%s", testRights) 打印,它会把 testRights 当作 char* 解析,自然只输出第一个字符串。但你可以通过下标或指针偏移访问所有元素:

正确访问示例代码

#include <stdio.h>

int main() {
    char* rightArray[3];
    rightArray[0] = "VIEW";
    rightArray[1] = "EDIT";
    rightArray[2] = "EXTRACT";

    char** testRights = rightArray;

    // 下标访问
    printf("%s\n", testRights[0]); // 输出 VIEW
    printf("%s\n", testRights[1]); // 输出 EDIT
    printf("%s\n", testRights[2]); // 输出 EXTRACT

    // 指针偏移访问
    printf("%s\n", *(testRights + 0));
    printf("%s\n", *(testRights + 1));
    printf("%s\n", *(testRights + 2));

    return 0;
}

注意事项

  • 字符串常量(比如 "VIEW")是只读的,不能修改它们的内容。如果需要可修改的字符串,得用 char 数组存储,比如 char rightArray[3][10] = {"VIEW", "EDIT", "EXTRACT"};。
  • char** 本身不会记录数组的长度,使用时要自己记住元素个数,避免越界访问导致程序崩溃或异常。

内容的提问来源于stack exchange,提问作者Noob_Coder13

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:35:25