c - execvp 出现段错误

标签 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 不适合它。 感谢您的帮助。

最佳答案

我发现以下代码有问题:

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

具体而言,使用 strncpy 有两个原因:1) strncpy() 接受三个参数,而您只指定了 2 个,2) 它正在尝试复制argv[0](程序名称)转换为 args[2],这是一个指针数组,而不是包含程序名称的缓冲区。

关于c - execvp 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27095018/

相关文章:

C中获取FreeType字体路径列表的跨平台方法

c - 如何使用 TerminateProcess 终止进程

c - 使用 valgrind 找出对象如何仍可访问

c - 在 c 中交换两个数字时出现段错误(核心已转储)

c - Windows API 的哪些部分不能从 ANSI C 代码访问?

C 指针数组未按预期打印,它用最后一个输入替换所有内容

c - "Saving"for循环中的当前状态稍后继续

C - 结构段错误

c - "No symbol version section for versioned symbol"

C 中的 main() 之前不能声明 void 函数