用C语言编写系统

用C语言编写系统,c,C,我需要用system编译一个程序,我有归档文件的名称和执行文件的名称,例如子执行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("Deb

我需要用system编译一个程序,我有归档文件的名称和执行文件的名称,例如子执行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;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
如果(argc!=3){
printf(“可编译和可执行的文件名”);
出口(1);
}否则{
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;
英勇;
开关(pid_hijo=fork()){
案例1:
printf(“无任何错误”);
案例0:
valor=系统(archivo3);
违约:
等待(空);
valor=系统(可执行);
}
}        
返回0;
}
这个

是未定义的行为

“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():

您的
案例
块应该有
中断
。请查看sprintf(),而不是strcat@cad是的,您可以
[tag:c]
.not found for me:/this返回分段错误您到底更改了什么?除非
argv[1]
argv[2],否则我的代码无法按原样处理分段错误
未初始化。@jmateopedalop。不,问另一个新问题。请接受这里的一个答案,因为分段错误似乎来自不同的原因。当我说我的代码时,我指的是贴在这里的代码。
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():