这应该很容易回答,但对我来说更难在 Google 或 K&R 中找到特定的正确答案。我也可以完全忽略这一点,如果是这样,请让我直截了当!

相关代码如下:

int main(){
    char tokens[100][100];
    char *str = "This is my string";
    tokenize(str, tokens);
    for(int i = 0; i < 100; i++){
        printf("%s is a token\n", tokens[i]);
    }
}
void tokenize(char *str, char tokens[][]){
    int i,j; //and other such declarations
    //do stuff with string and tokens, putting
    //chars into the token array like so:
    tokens[i][j] = <A CHAR>
}

所以我意识到我的 tokenize 函数中不能有 char tokens[][],但是如果我改为输入 char **tokens,我会收到编译器警告。此外,当我尝试使用 tokens[i][j] = <A CHAR> 将一个字符放入我的字符数组时,我出现了段错误。

我哪里错了? (以及有多少种方式......我该如何解决?)

非常感谢!

最佳答案

您需要指定数组第二维的大小:

#define SIZE 100
void tokenize(char *str, char tokens[][SIZE]);

这样,编译器就知道当您说 tokens[2][5] 时,它​​需要执行以下操作:
  • 找到tokens
  • 的地址
  • 移动 2 * SIZE 字节越过开始
  • 将 5 个字节移过该地址
  • ???
  • 利润!

  • 就目前而言,没有指定第二维,如果你说 tokens[2][5] 它怎么知道去哪里?

    关于c - 声明字符指针数组(arg 传递),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2769340/

    10-12 06:54