我想在C中创建和打印2-D char数组,我最终将其用作函数" execvp()"用于执行和开发shell。当我执行代码时,我将其作为输出而不是整个数组。 问题是什么?
在这部分中,如果代码i只出现了我尝试初始化数组的部分:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
char **cmd[4][3] = {
{"ls", "-l",NULL},
{"grep", "test.c", NULL},
{"wc", NULL},
{"sort", "-r", NULL}
};
for(i=1;i<5;i++)
{
for(j=0;j<3;j++)
{
printf("%s\n",cmd[i][j]);
}
}
return (0);
}
输出:
grep
test.c
Segmentation fault (core dumped)
答案 0 :(得分:0)
嗯。如果您只有 4 行,为什么会有for(i=1;i<5;i++)
?
应该是
printf("%s\n",cmd[i-1][j]);
或
for(i=0;i<4;i++)
答案 1 :(得分:0)
你有一个指向char的2维数组指针。所以cmd
的定义应该是:
char *cmd[4][3] = {...
for循环的索引不正确。 for(i=1;i<5;i++)
应该从0循环到4。
你应该在尝试打印NULL指针之前进行检查,这些指针肯定存在于数组中:
if( cmd[i][j] )
printf("%s\n",cmd[i][j]);
答案 2 :(得分:-1)
以下程序应该给你一个想法:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void printArray(char **array,long unsigned int numWords){
printf("\n");
printf("Inside printArray:\n");
long unsigned int i;
for(i=0;i<numWords;i++){
printf("%s\n",array[i]);
}
printf("\n");
}
int main(void){
long unsigned int numWords,i;
char **array;
printf("Introduce how many words do you want:> ");
if((scanf("%lu", &numWords)) != 1){
printf("Error, Fix it!\n");
exit(1);
}
array = malloc(sizeof(char*) * numWords * numWords);
if (array == NULL) {
exit(2);
}
for (i = 0; i < numWords; i++){
array[i] = malloc(sizeof(char*) * 100);
}
for (i = 0; i < numWords; i++){
printf("Enter your word number %lu:> ", i + 1);
if((scanf("%s", array[i])) != 1){
printf("Error, Fix it!\n");
exit(3);
}
}
printf("Inside Main:\n");
for (i = 0; i < numWords; i++){
printf("%s \n", array[i]);
}
printArray(array,numWords);
for (i = 0; i < numWords; i++){
free(array[i]);
}
free(array);
return 0;
}
输出:
Inside Main:
Michael
Jackson
Inside printArray:
Michael
Jackson
编辑:
根据您的问题,以下程序可以满足您的需求:
#include <stdio.h>
int main(void){
int i,j;
char *array[4][3] = {
{"A", "B", "C"},
{"D", "E", "F"},
{"G", "H", "I"},
{"J", "K", "L"},
};
for (i = 0; i < 4; i++){
for(j=0;j<3;j++){
printf("%s ", array[i][j]);
}
}
return 0;
}
输出:
A B C D E F G H I J K L