c - 处理二维 C 字符串时出现段错误

标签 c string

char *input[2]; 

input[0] = cat /etc/passwd
input[1] = grep root

我正在尝试创建一个 C 字符串的二维数组,以便

char **dArray; 

dArray[0][0] = cat
dArray[0][1] = /etc/passwd
dArray[0][2] = NULL   // Append NULL to mark end


dArray[1][0] = grep 
dArray[1][1] = root
dArray[1][2] = NULL // Append NULL to mark end 

我们如何做到这一点?

// My Code 

char **p ; 
char *_p[2];

_p[0] = cat /etc/passwd
_p[1] = grep root

p = malloc(2 * sizeof(char*));

for(i=0; i<2 ;i++){
   p[i] = malloc(20 * sizeof(char));
}

strcpy(p[0],_p[0]);
strcpy(p[0],_p[0]);

printf("%s,%s",p[0][0],p[1]); // I except the output cat,grep root 

最佳答案

由于字符串已经是一维数组,因此您将需要一个二维数组来存储与字符串本身无关的字符串组,并且每个顶部元素应在使用前分配。

类似于:

char ***dArray = malloc(sizeof(char**)*2);

dArray[0] = malloc(sizeof(char*)*3);

dArray[0][0] = "cat";
dArray[0][1] = "/etc/passwd";
dArray[0][2] = NULL;

dArray[1] = malloc(sizeof(char*)*3);

dArray[1][0] = "grep";
...

关于c - 处理二维 C 字符串时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168801/

相关文章:

c - 在 c 中使用 '"#include"和此链接错误?

JavaScript - 使用数组检查字符串

c# - 如何向 xaml 中的绑定(bind)添加附加文本(或字符串)

c++ - 需要帮助理解 ' string ltrim(const string &) ' 的含义

c++ - 字符串不能开始参数声明

java - 从文件中提取值

c - 结构对象数组 - 线程安全

c++ - 如何用 gcc 或 clang 模拟 _mm256_loadu_epi32?

c++ - 统计相邻格子数量相同的格子数量

c - pthread_create在主线程设置sched_deadline调度策略时返回EAGAIN