私の最初のプロジェクトをC言語で書こうとしていて、メモリリークに問題があります。私は間違いを見つけることができませんが、私はdo-whileループで何か問題があると考えます。プログラムはコンパイルされますが、開こうとするとセグメンテーションフォールトエラーが発生します。私は間違って何をしていますか?Cプログラムでメモリリークが見つかりません
私のプログラムで開いているファイルは、文字列のある.txtです(例:dvorndvl)。
私の目的は:引数でプログラムを開き、argv [1]という名前のファイルを開き、ファイルから文字列を配列に書き込みます。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"file1.h"
#include"file2.h"
void bye(){
puts("See you!");
}
int main(int argc, char *argv[]) {
char a[30];
int i, x;
printf("-----SOME TEXT-----");
FILE *f;
f = fopen(argv[1], "r");
if (f = NULL) {
printf("User doesn't exist.\n");
exit(1);
}
else{
do{
a[i] = getc(f);
i++;
} while(a[i]!=EOF);
char b[30];
printf("Password? ");
scanf("%c", b);
if(strcmp(a,b) == 0){
printf("\nHi, %s!\n", argv[1]);
printf("What do you want to do?");
printf("1. Turn the devices on/off. \n");
printf("2. Change my password. \n");
printf("3. -EXIT-\n");
switch(x) {
case 1:
devices(); break; //in file1
case 2:
encrypt(argv[1]); break;//in file2
case 3:
atexit(bye); break;
}
}
else
printf("Password is incorrect\n");
}
fclose(f);
return 0;
}
あなたは現在どのような出力を見ていますか?これが役立つかどうかわかりませんが、おそらくi = 0を初期化します。 – user2309843
デバッガを使用しようとしましたか? – Stargateur
'fgets'を使って' b'を読み込みます。char配列ではなく、charです。 – SHG