Giriş ve çıkış dosya adlarını komut satırı bağımsız değişkenleri aracılığıyla almaya çalışıyorum. Ben sadece getopt kullanıyorum (eğer daha iyi bir yol varsa söyleyin) ve ben segmentation fault
Komut satırı bağımsız değişkenlerini kullanırken bölüm hatası
Ben segmentasyon hatasına, giriş dosyasının adı neden olduğundan eminim. Giriş dosyasının adını komut satırından aldığımda bazı şeyler yanlış gidiyor. İşte
benim kodudur: Ben scanf kullanarak infile ve outFile adını alır çünkü eğer benim freads ve fwrites ile hiçbir sorun yoktur eminimint main (int argc, char **argv) {
char const *inFile = NULL; //I think the error is here
//an inFile that doesn't exist
//would cause a segmentation fault
char const *outFile = "outfile.txt";
double val;
int xFlg= 0;
int c;
char *rm; //I need this for strtod, but I can use atoi instead
while ((c = getopt (argc, argv, "xo")) != -1) {
switch (c) {
case 'x':
val = strtod(optarg, &rm);
xFlg = 1;
break;
case 'o':
outFile = optarg;
break;
default:
help(); //void function that prints help
return EXIT_FAILURE;
}
rm=NULL;
}
inFile = *(argv + optind);
fread code
.
.
.
call function
.
.
.
fwrite code
}
, her şey mükemmel çalışıyor, benim yok bölümleme hatası al.
İşlevimi çalıştırıp çalıştırmamaya karar vermek için xflg
değerini kullanıyorum. val
, işlevimin aldığı değerdir.
./run -x 3.14 -o outputfilename.txt Düzenleme
inputfilename.txt: Bu benim ulaşmak istediğim şey
void xFunc (input1, input2, val, xFlg) {
if (xFlg == 1) {
function code
.
.
.
} else {
return; //don't run the function if the user doesn't type -x
//into command line.
//I don't know if this is the proper way to do this.
}
}
: Burada
benim fonksiyonudur:Giriş dosya adını almak için aşağıdakileri yaparsam, segmentasyon hatası oluşmaz:
Eğer başka bir değer atanamıyor birconst char*
başlatıldı kez
char const *inFile = NULL;
......
inFile = *(argv + optind);
:
char inFile[100];
printf("Name of input file: \n");
scanf("%99s",somestring);
gerekirse, dosya işaretçisini değiştirebilir Bu şekilde? –
Hata ile derleme yapar ve inFile'ı açarken çöker. Scanf kullanarak inFile adını almaya çalıştım ve işe yarıyor. – user6005857
Sorunuzu düzenleyin ve kilitlenmenin oluştuğu kodu ekleyin. –