用C编译系统

时间:2015-10-19 14:54:14

标签: c

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

#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 个答案:

答案 0 :(得分:2)

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

是未定义的行为。

this error "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():