Удаление строк C++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fire64, 7 Jul 2010.

  1. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    Здравствуйте.
    Я написал код для удаления строк из HOST файла, однако код как-то криво работает, не могли бы вы посмотреть в чем причина

    PHP:
    int RemoveText( char *fultext, char *obrez )
    {
        
    char *found = strstr( fultext, obrez );

        if( !
    found )
        {
            return 
    0;
        }

        
    char relfound[10240];
        
    memset( relfound, 0, sizeof(relfound) );
        
    sprintf( relfound, "%s", found );

        
    char *end = relfound + strlen(obrez);

        if( !
    end )
        {
            return 
    0;
        }

        
    char relend[10240];
        
    memset( relend, 0, sizeof(relend) );
        
    sprintf( relend, "%s", end );

        
    int firstlen = strlen( fultext ) - strlen( relfound );

        
    char relfirstpart[10240];
        
    memset( relfirstpart, 0, sizeof(relfirstpart) );
        
    strncpy (relfirstpart, fultext,firstlen);

        
    char relfinal[10240];
        
    memset( relfinal, 0, sizeof(relfinal) );
        
    sprintf( relfinal, "%s%s", relfirstpart, relend );

        
    memset( fultext, 0, strlen(fultext) );    
        
    memcpy( fultext, relfinal, strlen(relfinal) - 5 );
        
        return 
    1;
    }

    PHP:
    int DeketeLocalHost( char *domain )
    {
        
    char *windir = getenv ("SystemRoot");

        
    char hostfile[1024];
        
    memset( hostfile, 0, sizeof(hostfile) );
        
    sprintf( hostfile, "%s\\system32\\drivers\\etc\\hosts", windir );

        
    FILE *rfp = fopen( hostfile, "rb" );

        if( !
    rfp )
        {
            
    printf( "Can't open file %s\n", hostfile );

            return 
    0;
        }

        
    fseek( rfp, 0, SEEK_END );
        
        
    int len = ftell( rfp );
        
    rewind( rfp );

        
    char *pHostBase = ( char * )malloc( len );
        
    fread( pHostBase, 1, len, rfp );

        
    char relHostBase[102400];
        
    memset( relHostBase, 0, sizeof(relHostBase) );
        
    sprintf( relHostBase, "%s", pHostBase );

        
    fclose( rfp );

        
    FILE *wfp = fopen( hostfile, "wp" );

        if( !
    wfp )
        {
            
    printf( "Can't open file %s\n", hostfile );

            return 
    0;
        }

        
    char remstring[1024];
        
    memset( remstring, 0, sizeof(remstring) );
        
    sprintf( remstring, "\n127.0.0.1       %s", domain );

        
    RemoveText( relHostBase, remstring );

        
    fwrite (relHostBase , 1 , strlen(relHostBase) , wfp );

    //    fprintf( wfp, "%s", relHostBase );

        
    fclose(wfp );

        return 
    1;
    }
     
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Не проще использовать fgets/fputs для этого?
     
  3. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    Code:
    FILE *rfp = fopen( hostfile, "rb" );
    Почему текстовой файл открываешь как бинарный, ты когда нибудь видел чтобы в host файле были какие нибудь бинарные коды ? :)


    Code:
    FILE *wfp = fopen( hostfile, [U]"wp" [/U]);
    Что значит wp ? :D


    Code:
    char relfirstpart[10240];
    char relHostBase[102400]; 
    
    Боже ! Какие же у нас масштабы :D, ты что,собираешься туда скопировать целый роман "Хитроумный идальго Дон Кихот Ламанчский" ?
     
    1 person likes this.
  4. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    с запасом )))
    а когда тестиш так и надо потом уже когда работает делаеш по нормальному не будеш же для проверки каждой идеи создавать динамическую систему чтоб потом все поломать так как идея не понравилась в работе

    p.s сам так пишу не вижу ничего плохого если идея понравилась переписываю нормально
     
  5. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    Зато я вижу,во первых это плохая привычка, во вторых никто не может гарантировать что после тестировании ты все настроишь так как должно быть.

    ..а эти memset-ы это вообще ужас блин, если он работает чисто с полями char нафиг не нужно каждый раз чистить buffer
    Лучше всего еще при создании чистить поля,например :
    Code:
    char str[32] = {0};
    или

    Code:
    char str[16][32] = { {0} };
     
  6. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    плохая привычка )))

    лучше промолчать чем такое говорить

    ждем аргументации ...
     
  7. b0r2

    b0r2 Member

    Joined:
    29 Jun 2010
    Messages:
    30
    Likes Received:
    5
    Reputations:
    0
    Если лучше промолчать,тогда молчи без лишнего оффтопа ;)

    Аргументацию хочешь ??
    Знаешь сколько весит файл hosts в дефолтом состоянии ? Около 700 Byte
    Знаешь сколько КилоБайт 102400 Байтов ? 100 !
    Так,какая тебе еще аргументация нужна ??
     
    #7 b0r2, 10 Jul 2010
    Last edited: 10 Jul 2010
  8. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    вот что за человек говорит "плохая привычка" иму говориш
    аргументируй он начинает говорить про "файл" или действительно
    не понимает сути вопроса или школьник которому нечего сказать ...