-4

私は長い間 c でコードを書こうとしていましたが、プログラムの目的は 1) 引数として受け取ったテキスト ファイルの最後の 10 行を出力することです。2) 表示エラー。それ以外の場合は、シーク コマンドに問題があり、修正中に失われます。

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

int main ( int argc, char *argv[] )
{
    char buffer[20],c;
    int bytes =512,flag=0;
    if ( argc != 2 ) /* argc should be 2 for correct execution */
    {
        /* We print argv[0] assuming it is the program name */
        printf( "usage: %s filename", argv[0] );
    }
    else 
    {
        // We assume argv[1] is a filename to open
        FILE *file = fopen( argv[1], "r" );

        /* fopen returns 0, the NULL pointer, on failure */
        if ( file == 0 )
        {
            printf( "Could not open file\n" );
        }
        else 
        {
             while (1)
             {
                   sprintf (buffer, "seek(file,%d,0)", bytes);
                   system(buffer);
                   while ( (c=fgetc(file))!= EOF)
                   {
                         if(c=='\n')
                         {
                              flag++;
                         }
                   }
                   if (flag >= 10)
                      bytes=bytes*2;
                   else 
                        break;
             }

             flag-=10;
             sprintf (buffer, "seek(file,%d,0)", bytes);
             system(buffer);
             while(flag > 0)
             {
                  if((c=fgetc(file))=='\n')
                  {
                         flag--;
                  }
             }
             while ( (c=fgetc(file))!= EOF)
             {
                         printf("%c",c);
             }
        }
    }
}

これがエラーです。

操作可能なプログラムまたはバッチ ファイル。'seek' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。

4

3 に答える 3

3

C では、このsystem()関数は文字列を受け取り、それをシェル コマンドとして解釈します (コマンド ラインで入力した場合と同様)。これは、OS への低レベルの呼び出しである「syscall」とは異なり、おそらくここで混乱の元になります。

あなたが使いたいのは次のようですfseek()

fseek(file, bytes, SEEK_SET);

sprintfこれにより、およびへの呼び出しが置き換えられsystemます。

于 2011-10-08T23:06:11.287 に答える
1
system(buffer);

あなたは実際にこれをやっています:cmd seek. したがって、エラーは正しいです。デフォルトでは、Windows にはシーク プログラムはインストールされていません。

于 2011-10-08T22:44:13.717 に答える
0

このシステム コマンド「seek」とは何ですか? fseek代わりにC関数が欲しくないですか?

于 2011-10-08T22:43:45.340 に答える