将具有固定长度字符串的数组传递给C中的函数
我试图让程序启动一个单独的进程,在linux中以长格式列出文件。(换句话说,我试图让我的程序执行“ls-al”)。我遇到的问题是,编译器不断用以下消息警告我:将具有固定长度字符串的数组传递给C中的函数,c,arrays,string,function,size,C,Arrays,String,Function,Size,我试图让程序启动一个单独的进程,在linux中以长格式列出文件。(换句话说,我试图让我的程序执行“ls-al”)。我遇到的问题是,编译器不断用以下消息警告我:警告:从不兼容的指针类型传递参数2“run” 我该如何解决这个问题 #include <sys/types.h> #include <sys/stat.h> #include <wait.h> #include <fcntl.h> #include <stdio.h> #inclu
警告:从不兼容的指针类型传递参数2“run”
我该如何解决这个问题
#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
无效运行(char*app,char*param[250]){
如果(fork()==0){
execvp(应用程序,参数);
}否则{
等待(空);
}
}
int main(){
printf(“运行ls-al…\n”);
字符参数[10][250];
strcpy(参数[0],“ls”);
strcpy(参数[1],“-al”);
参数[2][0]='\0';
运行(“/usr/bin/ls”,参数);
printf(“\n”);
返回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;
此表达式:param[2][0]='\0'代码>不正确。参数列表中的最后一个条目是char*
to NULL,不是单个0x00字节,而是所有0x00的“指针大小(32位体系结构上为4字节)”数组,即参数指针列表中的最后一个条目必须是“0x00000000”(对于32位体系结构),即指向地址0的指针请阅读fork()的手册页
。fork()可以返回3种不同的内容。1) =0,则子进程正在运行。2) >0则父进程正在运行(并且子进程已成功启动)3)调用execvp()
可能会失败。如果失败,则控制返回到调用execvp()
后的下一个语句,该语句应该是调用peror()
,然后调用exit()
,总体而言,如果fork()失败或execvp()失败,则代码将执行wait()
,可能永远等待子事件,这永远不会发生。换句话说,始终检查系统函数调用返回的值,以确保它们成功。我已经阅读了fork的手册。在编写代码时,有时我可以让程序运行,但没有传入参数。我知道我的字符串数组(多索引字符数组)存在问题,但我不知道如何使函数以execvp期望的格式接收数据