我正在尝试让程序启动一个单独的进程,只需在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;
}
答案 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;