私はCC文字列の変更
でプログラムするとき、私はoldPacket.filename = "fallout.jpg"
//を使用する場合、私はfallout.jpgというファイルがあり、構造体は
プログラムは非常にうまくいった
今、私はファイル名を入れて、ファイルの存在を確認するユーザーにすることにしました。プログラムはもはや働いているしかし、私は
while (Searchfile(&oldPacket)){
printf("Please input the file name in the format: ftp <file name> \n");
}
でこの関数を呼び出していないし、それは誰もがいくつかのアイデア理由を持っている
int filesize;
fp = fopen(oldPacket.filename, "rb");
fseek(fp, 0L, SEEK_END);//here is the seg fault
でワンセグ障害を示し
bool Searchfile(packet* ptr) {
char userinput[100];
fgets(userinput, sizeof (userinput), stdin); //non terminated input by fgets
userinput[strcspn(userinput, "\n")] = 0;
//printf("%d\n",strlen(userinput));
ptr->filename = userinput + 4;//i skip the first 4 char since the correnct format is ftp <filename>
printf("%s\n",ptr->filename);
printf("%d\n",strlen(ptr->filename));
ptr->filename[strlen(ptr->filename)] = '\0';
if (access(ptr->filename, F_OK) != -1) {
printf("exist\n");
return false;
} else {
//printf("does not exist\n");
return true;
}
}
:私は次の関数を書きましたこれが起こる?
あなたはローカル変数userinput
のアドレスにptr->filename
ポイントを聞かせ、そしてuserinput
がいったんこの値にアクセスし、事前
範囲外になるスタック上の変数へのポインタを返します。 – orhtej2
また、segフォルトの場所を見ると、 "fp"という値に興味があるかもしれません。 –