gpt4 book ai didi

用系统在 C 中编译

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:28 24 4
gpt4 key购买 nike

我需要用系统编译一个程序,我有存档的名称,和执行文件的名称,例如,儿子执行 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;
}

最佳答案

这个

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

关于用系统在 C 中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33217605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com