我遇到了一些麻烦,因为我是 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/