首页 > 解决方案 > 如何获取 char 数组指向的元素数?

问题描述

我正在研究,但找不到方法。我将 2 传递char array pointers给一个函数并用值填充这两个数组。有没有办法获得填充数组的大小?

size_t size = sizeof(*arguments)/sizeof(arguments[0])已经尝试过了,但是结果给了我 1,我知道为什么它通过研究给我 1 的结果,但我只是找不到一种方法来获得正确的数组长度(数组中有多少元素的值)。如果这是不可能的,我该如何解决这个问题?我需要知道这一点,因为我想为我的函数提供任何数组的最后一个值NULL。exec我的程序工作如下:

用户输入执行的 2 个程序名称。但是这 2 个程序由";". 所以我有 2 个大小可以变化的数组,这取决于终端中的输入。

void getArguments(char * [],char * [], int ,char * []);

  int main(int argc, char * argv[]){
     pid_t pid,pid2;
     char * arguments2[argc/2+1];
     char * arguments[argc/2+1];

     getArguments(arguments, arguments2,argc,argv);

     if((pid=fork())==-1){
        printf("Error");
     }
     else if(pid == 0){

        execvp(arguments[0],arguments);
     }

     else{
      if((pid2 = fork())== -1){
        printf("Error" );
      }
      else if(pid2 == 0 ){

        execvp(arguments2[0],arguments2);
      }
      else{
        int status;
        wait(&status);
        exit(0);
      }
     }
    return 0;
  }


  void getArguments(char * arguments[], char * arguments2[],int argc, char * argv[]){
      int i=0;

      while(strcmp(argv[i+1],";")!=0){
      arguments[i] = argv[i+1];
      i++;
      }
      arguments[argc/2-1]= NULL;

      int j = i+2;
      int k = 0;

      for( ;j<=argc; j++){
      arguments2[k] = argv[j];
      k++;
      }
      arguments2[argc/2-1]=NULL;
  }

标签: c

解决方案


不,如果你只有一个指针,你就无法获得数组的大小。您必须将大小作为单独的参数传递给您的函数。

编辑:我现在明白你需要从你的函数返回数组中使用的数字元素。您可以添加两个接收大小的整数指针变量,也可以将第一个未使用的元素设置为 NULL,以便调用者知道它何时位于填充部分的末尾。

例如:

 char * arguments2[argc];  // as you don't know the result, do not divide by 2: it may be too small!
 char * arguments[argc];
 int size1=0, size2=0;

 getArguments(arguments, &size1, arguments2, &size2, argc, argv);

和:

void getArguments(char *arguments[], int *size1, char *arguments2[], int *size2, int argc, char *argv[])
{
    // ...
    *size1= i;
    //...
    *size2= j;
}

推荐阅读