-5

c で重複した cat 関数を実装しようとしています。セグメンテーション違反が発生していますが、その理由がわかりません。

 #include <stdio.h>
    #include <stdlib.h>




int main(int argc,char *argv[])
{
    char* s;        /* input string */

    int c;

    if(argc==1){


        while (gets(s)){
            puts(s);
        }
    }

    else{

    FILE *file = fopen( "./argv[1]", "r" );
    while((c=fgetc(file))!=EOF){
        fputc(c,stdout);

    }

    fclose(file);   

    }


    return 0;
}
4

4 に答える 4

0

malloc()基本的にメモリを割り当てます。free()最後に、割り当てられたスペースを解放するために変数も必要です。

gdb()エラーを見つけてプログラムをデバッグするために使用する必要があります。

于 2013-04-16T06:49:20.690 に答える
0
fopen( "./argv[1]", "r" );

え、なに?仮定ですよね?

char buf[0x1000];
snprintf(buf, sizeof(buf), "./%s", argv[1]);
FILE *f = fopen(buf, "r");

また、s初期化されていないポインターを使用しているため (ポインターにメモリを割り当てていません)、プログラムも未定義の動作を呼び出します。

于 2013-04-16T06:31:25.377 に答える