从2d char数组初始化指向char的指针数组

时间:2017-09-04 00:15:54

标签: c arrays

我有一个功能

int executeCommand(char args[][TOKENSIZE]){
  char *argv[] = {args[0], args[1]}; // This works
  char *argv[] = {args}; // This doesn't
}

args变量的长度不固定,所以我不能按原样使用第一行。由于某些原因,我不想使用malloc或free。有没有办法从args初始化这个argv数组而不用硬编码条目数。

1 个答案:

答案 0 :(得分:2)

该功能需要以某种方式知道大小,否则就不可能完成任务。一种可能的方法是使用指向VLA的指针:

int executeCommand(size_t n, char args[n][TOKENSIZE]){
  char* argv[n];
  for(size_t i=0; i<n; i++)
  {
    argv[i] = args[i];
  }
}

至于为什么你不能简单地使用args而不是复制数组地址,我不知道。

数据的完整硬拷贝看起来像

char argv[n][TOKENSIZE];
memcpy(argv, args, sizeof(char[n][TOKENSIZE]));