c - 新数组和指针

标签 c

我遇到了一些麻烦,因为我是 C 的新手,甚至不确定我想做的事情是否可行。

我将一个名为 args 的数组传递给一个函数。在该函数中,我还创建了一个名为 arrayOfArgs 的二维数组。我想要做的是将 args 中的某些值放入名为 arrayOfArgs 的二维数组中的特定位置。

到目前为止,这是我的代码:

int do_command(char **args){
        //this is usually a changing variable depending on the situation, but I've hard coded it to make sense
        int commands = 3;
        char **arrayOfArgs[commands][10];
        //counts which column in arrayOfArgs we are on
        int commandNum = 0;

//Counts which part of a command we are on
        int count = 0;

    //Array Counters
    int i = 0;
    int j;

    //Go through args until we reach the end
    while (args[i] != NULL){
        if(!strcmp(args[i], "|")){
            arrayOfArgs[commandNum][count] = args[i];
            count++;
        }
        else if (strcmp(args[i], "|")) {
            count = 0;
            commandNum++;
        }
        //Looking at the next value in args
        i++;
    }

我遇到了问题,因为唯一放入 arrayOfArgs 的东西是乱码。我确定我在数组指向的方式、arrayOfArgs 的创建方式或两者方面做错了什么。

或者是否可以像我尝试的那样从一维数组转换为二维数组?

我很确定那里有一个 NULL,因为之前我调用了这个循环并且它起作用了:

for(i = 0; args[i] != NULL; i++) {
    printf("Argument %d: %s\n", i, args[i]);
}

谢谢!

最佳答案

首先,您如何验证 arrayOfArgs 的内容是乱码?您是否使用 printf 打印出内容?你在使用调试器吗?

其次,arrayOfArgs每个元素 应该存储什么?它应该是 9 个或更少字符的字符串的 3 元素数组吗?它应该是指向 char 的指针的 3x10 元素数组吗?它应该是指向 char 指针的指针的 3x10 元素数组吗?

行内

 arrayOfArgs[commandNum][count] = args[i];

表达式 args[i] 的类型为 char *;这强烈暗示您打算为 arrayOfArgs 的每个元素存储一个 char *。在这种情况下,将 arrayOfArgs 的声明更改为

char *arrayOfArgs[commands][10];

(我读这个是因为每个命令最多可以有 9 个参数)。

IOW,它看起来就像你在尝试存储类似的东西

    col     0     1     2     3     4     5     6     7     8    9
row 
  0       "cmd"  "a1"  "a2"  NULL  NULL  NULL ...
  1       "cmd"  "a1"  NULL
...

通过存储指向二维数组中每个字符串的指针。

如果是这种情况,那么您需要像我上面所说的那样更改 arrayOfArgs 的声明。如果不是这种情况, 那么您需要给我们一个例子,说明arrayOfArgs应该 的样子。

关于c - 新数组和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573232/

相关文章:

c - 故意分配大于 INT_MAX 的 `i` 值时出现奇怪的行为

c - 除以 2 时十进制转为二进制 C

c - C 中的数组清理

c - C 中的 select() : the Rosetta stone?

c - 如何从 C 字符串中删除所有出现的给定字符?

c - mmap 和 valgrind,mmap 不会增加堆大小

c++ - 如何用C连续输出计算开始后的秒数?

c - 为什么将指向数组的指针传递给需要指向 int 的指针的函数可以正常工作而不会出现错误

c - exec*()后ps会显示什么名字?

c++ - 需要帮助理解遗留的 C 代码 _fmemcpy((LPSTR FAR *)Defdat,(LPSTR FAR *)&DLLdat,sizeof(DATSETTING));