Bu program, bir txt dosyasının adını ve txt dosyasını işleyen bir .cpp kaynak dosyasının adını girmesini istediğim bir 'program' programıdır. bilgi. Daha sonra kaynak dosyayı başka bir metin dosyası çıkaran txt dosyasıyla birlikte derlerim. Bu yeni tekstil daha sonra beklenen çıktı ile karşılaştırıldı (ki ben de verilmiştim).Başka bir .cpp dosyasını çalıştırmak için sistem işlevini kullanma
Sistem işlevi, kullanıcıların bir C programından UNIX komutlarını çalıştırmasına izin verir.
: Ben kaynak kullanıcı ben"_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
benim profesör tarafından sağlanan derlenmesi am kaynak dosya şuna benzer bir işlevi vardır belirten bir hata alıyorum
sağlar dosyasını derlemek çalışıyorum zaman
#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;
}
Yazdığım kod aşağıda görülebilir: Bu kod kullanıcıdan bilgileri alır ve sonra derler.
#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;
}
ben cevaplar
Bir önceki sorunuzu, yeni bir soru göndermek yerine gerekli bilgileri içerecek şekilde düzenlemelisiniz. – MikeCAT
@MikeCAT Yapılmış eleştiriyi takdir ediyorum, ancak ben hataların düzeltilmesi ve ödevimi tamamlama konusunda endişeleniyorum, scanf() işlev ailesinden herhangi birini çağırırken yığın taşması –
'un nasıl kullanılacağını öğrenmekten daha önemlidir: 1) İşlemin başarılı olduğundan emin olmak için döndürülen değer (parametre değeri değil). 2) '% s' biçim belirtecini kullanırken, her zaman maksimum uzunluk değiştiricisini (giriş arabelleğinin uzunluğundan daha az olan) kullanın, böylece kullanıcı giriş arabelleğini değiştiremez ve bu da tanımlanamayan davranışlarla sonuçlanabilir ve bir seg hatası olayı. Bir örnek olarak, bu: 'scanf ("% s ", srcfile);' olmalıdır: "eğer (1! = Scanf ("% 199s ", srcfile)) {/// error ve exit}} – user3629249