繁体   English   中英

在c中打印二维字符数组

[英]printing 2-d character array in c

我想在C中创建和打印二维char数组,最终将其用作函数“ execvp()”的输入,以执行和开发shell。 当我执行代码时,我将其作为输出而不是整个数组。 问题是什么?

在这部分中,如果代码仅显示我尝试初始化数组的部分:

#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)

如果只有4行,为什么会有for(i=1;i<5;i++) 应该是

printf("%s\\n",cmd[i-1][j]);

要么

for(i=0;i<4;i++)

您有一个二维数组的char指针。 因此, 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]);

以下程序应该给您一个想法:

#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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM