Эта программа является программой a'grader, где я просто прошу пользователя ввести имя файла txt и исходный файл .cpp, который обрабатывает txt-файл и получает его Информация. Затем я компилирую исходный файл вместе с файлом txt, который выводит другой текстовый файл. Этот новый текстиль затем сравнивается с ожидаемым результатом (который мне также дал.).Использование системной функции для запуска другого .cpp-файла
Системная функция позволяет пользователям запускать команды UNIX из программы на языке C. Когда я пытаюсь скомпилировать исходный файл пользователь предоставляет
я получаю ошибку о том, что
"_main", referenced from: implicit entry/start for main executable.
clang: error: linker command failed with exit code 1 (use -v to see invocation)
sh: ./myProg: No such file or directory
Исходный файл, который я компилляции при условии, мой профессор имеет одну функцию, которая выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#define MAX_VALUES 3
#define OUTPUT_LINES 5
int notmain(int argc, char **argv)
{
/*
* argv is just the file name
*/
//printf(argv[1]);
int values[MAX_VALUES];
int i, j;
FILE *inputFile;
char name [20]="input.txt"; // I have included this piece of code to see if there is a correct output from the source file provided by the user.
if ((inputFile = fopen(name, "r")) == NULL) {
printf("Error opening input file.\n\n");
exit(1);
}
for(i = 0; i < MAX_VALUES; i++)
fscanf(inputFile, "%d", &values[i]);
for(i = 0; i < OUTPUT_LINES; i++){
for (j=0; j < MAX_VALUES; j++)
printf("%d ", values[j]*(i+1) + j);
printf("\n");
}
return 0;
}
Код, который я написал, приведен ниже: Этот код принимает информацию от пользователя, а затем компилирует его.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM_LINES 5
int main(){
char srcfile[200];
char inpfile[200];
char resultfile[200];
printf("Please enter the name of the source file: \n");
scanf("%s",srcfile);
printf("Please enter the name of the input file: \n");
scanf("%s",inpfile);
printf("Please enter the name of the expected result file: \n");
scanf("%s",resultfile);
char test1 [100]="gcc -o myProg ";
char test2 [100]="./myProg ";
strcat(test2,inpfile);
strcat(test2," > ");
strcat(test2,resultfile);
strcat(test1,srcfile);
printf("%s\n",test1); //these are just tests
printf("%s",test2); //these are just tests
if (system(test1)) {
printf("There is an error compiling the program ");
}
if (system(test2)!= 0) {
printf("There is an error running the executable");
}
return 0;
}
Если вы ищете решение, которое я разместил его в ответах
Вы должны отредактировать свой предыдущий вопрос, включив требуемую информацию вместо того, чтобы публиковать новый вопрос. – MikeCAT
@MikeCAT я ценю критику, но я больше беспокоюсь об исправлении ошибки и выполнении моего задания, а не об обучении использованию правильного этикета при переполнении стека –
при вызове любого из функций функций scanf(): 1) всегда проверяйте возвращаемое значение (не значение параметра), чтобы гарантировать успешную работу. 2) При использовании спецификатора формата «% s» всегда используйте модификатор максимальной длины (то есть один меньше длины входного буфера), чтобы пользователь не мог перехватить входной буфер, что приведет к неопределенному поведению и может привести к событие сбоя seg. В качестве примера, это: 'scanf ("% s ", srcfile);' должно быть: 'if (1! = Scanf ("% 199s ", srcfile)) {/// ошибка обработки и выход}' – user3629249