在c

时间:2015-11-28 19:59:55

标签: c arrays

我想在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)

3 个答案:

答案 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