2015-10-19 80 views
0

我需要用系统编译一个程序,我有存档的名字和执行文件的名字,子执行gcc -o file.c exe1,父执行./exe1例如用C编译系统

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <string.h>  

int main(int argc,char *argv[]) 
{ 
    if (argc != 3) { 
     printf("Debe ingresar el nombre del archivo a compilar y el ejecutable"); 
     exit(1); 
    } else { 
     char *archivo1 = strcat("gcc ", argv[1]); 
     char *archivo2 = strcat(archivo1, ".c -o "); 
     char *archivo3 = strcat(archivo2, argv[2]); 
     char *ejecutable = strcat("./", argv[2]);  
     pid_t pid_hijo; 
      int valor; 
     switch(pid_hijo = fork()) { 
      case -1: 
       printf("No se pudo crear el hijo"); 
      case 0: 
       valor = system(archivo3); 
      default: 
       wait(NULL); 
       valor = system(ejecutable); 
     } 
    }   
    return 0; 
} 
+1

你'case'块应该有'breaks'。 –

+1

看看sprintf()而不是strcat – Jack

回答

2

char *archivo1=strcat("gcc ",argv[1]); 

是不确定的行为。

"gcc "是一个字符串,它只是读过,strcat()将尝试写它,实际上超出"gcc "末,试图写入超出数组的结尾也是不确定的行为,但在这种情况下,它不是数组,因此从任何角度来看都是非法的。

你需要snprintf()代替,这样

char command[200]; 
ssize_t result; 
result = snprintf(command, sizeof(command), "gcc %s -o %s", argv[1], argv[2]) ; 
if (result >= (ssize_t) sizeof(command)) 
    error_cannot_store_the_command_in_command(): 
+1

不错,不知道在答案中写标签的可能性...... – Downvoter

+1

@cad是的,你可以'[tag:c]'。 –

+0

找不到我/:这会返回一个分段错误 –