Здравствуйте. Я написал код для удаления строк из 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; }
Code: FILE *rfp = fopen( hostfile, "rb" ); Почему текстовой файл открываешь как бинарный, ты когда нибудь видел чтобы в host файле были какие нибудь бинарные коды ? Code: FILE *wfp = fopen( hostfile, [U]"wp" [/U]); Что значит wp ? Code: char relfirstpart[10240]; char relHostBase[102400]; Боже ! Какие же у нас масштабы , ты что,собираешься туда скопировать целый роман "Хитроумный идальго Дон Кихот Ламанчский" ?
с запасом ))) а когда тестиш так и надо потом уже когда работает делаеш по нормальному не будеш же для проверки каждой идеи создавать динамическую систему чтоб потом все поломать так как идея не понравилась в работе p.s сам так пишу не вижу ничего плохого если идея понравилась переписываю нормально
Зато я вижу,во первых это плохая привычка, во вторых никто не может гарантировать что после тестировании ты все настроишь так как должно быть. ..а эти memset-ы это вообще ужас блин, если он работает чисто с полями char нафиг не нужно каждый раз чистить buffer Лучше всего еще при создании чистить поля,например : Code: char str[32] = {0}; или Code: char str[16][32] = { {0} };
Если лучше промолчать,тогда молчи без лишнего оффтопа Аргументацию хочешь ?? Знаешь сколько весит файл hosts в дефолтом состоянии ? Около 700 Byte Знаешь сколько КилоБайт 102400 Байтов ? 100 ! Так,какая тебе еще аргументация нужна ??
вот что за человек говорит "плохая привычка" иму говориш аргументируй он начинает говорить про "файл" или действительно не понимает сути вопроса или школьник которому нечего сказать ...