传递具有固定长度字符串的数组以在C中起作用

时间:2015-10-19 23:22:45

标签: c arrays string function size

我正在尝试让程序启动一个单独的进程,只需在linux中以长格式列出文件。 (换句话说,我正在尝试让我的程序执行“ls -al”)。我遇到的问题是编译器一直警告我这条消息:warning: passing argument 2 of 'run' from incompatible pointer type

我该如何解决这个问题?

#include <sys/types.h>
#include <sys/stat.h>
#include <wait.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

    void run(char *app,char* param[250]){
        if (fork()==0){
        execvp(app,param);
        }else{
        wait(NULL);
        }
    }

int main(){
      printf("Running ls -al...\n");
      char param[10][250];
      strcpy(param[0],"ls");
      strcpy(param[1],"-al");
      param[2][0]='\0';
      run("/usr/bin/ls",param);
      printf("\n");
      return 0;
    }

1 个答案:

答案 0 :(得分:0)

代码中的其他错误:

此表达式:char* param[250]run()函数的第二个参数)

表示该参数是指向250个指向字符数组的指针数组的指针。

这是不正确的。

表达式应为:char * param[]

它会更好,回到main()来定义param:

char ** param = NULL;

然后在检查错误时分配适当的内存量

if( NULL == (param = malloc( 3* sizeof (char*) ) )
{ // then malloc failed
    perror( "malloc for array of parameters failed" );
    exit( EXIT_FAILURE );
}

// implied else, malloc successful

然后是参数值和参数列表终止符:

 param[0] = "ls";  // sets a pointer
 param[1] = "-al"; // sets a pointer
 param[2] = NULL;