用execvp分段故障

时间:2014-11-23 22:16:33

标签: c

我尝试使用execvp创建一个作为参数给出的存储库。但我得到一些我无法通过以下代码解决的段错(核心转储):

#include <sys/stat.h>  //mkdir
#include <sys/types.h>
#include <stdio.h>  //perror
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX 10

int main(int argc, char *argv[]) {

int i;
char *args[6] = {"tar","-xzvf", strcpy(args[2],argv[0]), "-C", "/home/bg/Desktop  /Project/", NULL};
FILE *fp;
char *line = (char *)malloc(sizeof(char));
char *result = (char *)malloc(sizeof(char));
size_t len = 0;
ssize_t read;
char* strings[MAX]; 


int result_code = mkdir("/home/bg/Desktop/Project/", 0777); 
umask(mask); 

if(result_code ==-1) {
  perror(argv[0]);
  printf("Erreur dans la création du répertoire/n");
  exit(EXIT_FAILURE);
}

if(result_code==0){

printf("Le répertoire a bien été crée \n");

execvp(*args,args); 

fp = fopen("/home/bg/Desktop/Project/meta", "r"); 
if (!fp) {perror("problème avec le fichier");
          fprintf(stderr, "Erreur dans l'ouverture du fichier\n");
          exit(EXIT_FAILURE);
}


while ((read = getline(&line, &len, fp)) != -1) { 
           printf("On récupère une ligne de taille %zu :\n", read);
           printf("%s", line);

           if(strchr (line,'#') != NULL) {

           }

           else if (strchr (line,'$') != NULL) {
             strings[i] = strdup(line);
             i++;

           }

           else if (strchr (line,'>') != NULL) {
             result = strdup(line);
           }

       }

unlink("meta");
free(line);
free(result);
exit(EXIT_SUCCESS);

  }


}

我尝试使用char **,但execvp并不适合它。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我发现以下代码存在问题:

char *args[6] = {"tar","-xzvf", strncpy(args[2],argv[0]), "-C", "/home/bg/Desktop  /Project/", NULL};

具体来说,strncpy有两个原因:1)strncpy()有三个参数,你只指定了2,而且2)它正在尝试复制argv[0](程序) name)到args[2],这是一个指针数组,而不是包含程序名称的缓冲区。

相关问题