[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Угу, если бы у всех CRT-символов были аналоги в API windows, то нафига бы она была нужна. Не надо проводить четкую аналогию между CRT и API, её нет. То, что у strlen() есть аналог lstrlen() в kernel32.dll считайте чистой случайностью.

    Вообще посмотри экспорт ntdll - найдешь очень много ф-ий типа strstr().
    Ну можно вручную переписать много чего.
    Я конечно хотел понтануться и кинуть листинг на осенблере всех этих ф-ий, но потом подумал что заебался понтоваться. Я и так крутой ИМХО.
    Code:
    bool lstrncmp( char *s1, char *s2, size_t iMaxLen ) {
    	for (size_t i = 0; i < iMaxLen; i++) {
    		if (!s1[i] || !s2[i]) return true;
    		if (s1[i] != s2[i]) return true;
    	}
    	return false;
    }
    
    void lmemset( void *dst, char v, size_t s ) {
    	for (size_t i = 0; i < s; i++) {
    		((char*)dst)[i] = v;
    	}
    }
    
    void lmemcpy( void *dst, void *src, size_t s ) {
    	for (size_t i = 0; i < s; i++) {
    		((char*)dst)[i] = ((char*)src)[i];
    	}
    }
    
    bool lmemcmp( void *p1, void *p2, size_t s ) {
    	for (size_t i = 0; i < s; i++) {
    		if (((char*)p1)[i] != ((char*)p2)[i]) return true;
    	}
    	return false;
    }
    
    void *lmalloc( size_t s ) {
    	return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, s );
    }
    
    void lfree( void *p ) {
    	HeapFree( GetProcessHeap(), 0, p );
    }
    
    void* __cdecl operator new( size_t s ) {
    	return lmalloc( s );
    }
    
    void __cdecl operator delete( void *p ) {
    	lfree( p );
    }
    
     
    #321 KEZ, 22 Sep 2007
    Last edited: 22 Sep 2007
    3 people like this.
  2. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Кез, прекратите понтоваться, пришло время нового поколения. У них есть пинч, а у вас знания по какимто С и онсемблеру, фуу.. не модно.
    Я конечно тоже решил понтонуться и заделал аналог strlen() на ассемблере. Кстати, большинство функций crt переводятся на ассемблер за пару минут, при определенном знании конечно.
    Code:
    unsigned int _strlen(char *str)
    {
    unsigned int len = 0;
    __asm
    {
    xor eax, eax
    mov edi, str
    or ecx, 0xffffffff
    repne scasb
    not ecx
    dec ecx
    mov len, ecx
    }
    return len;
    }
    
    И даже пример использования!
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    unsigned int _strlen(char *str)
    {
    	unsigned int len = 0;
    __asm
    {
    xor eax, eax
    mov edi, str
    or ecx, 0xffffffff
    repne scasb
    not ecx
    dec ecx
    mov len, ecx
    }
    return len;
    }
    
    int main(int argc, char *argv[])
    {
      unsigned int ls = _strlen("WJWIdske83");
      printf("%d\n", ls);
      system("PAUSE");	
      return 0;
    }
    
     
  3. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2KEZ ну вот с нью и делитом все не так хорошо тк их основное достоинство в том, что они помимо выделения\освобождения памяти вызывают конструктор\деструктор к применяемым обьектов.

    зы все операции к отдельным байтам памяти лучше конечно заменять обращениями по dword если это позволяется.
     
  4. -Time-

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

    Joined:
    4 Mar 2007
    Messages:
    10
    Likes Received:
    23
    Reputations:
    13
    Выскакивает ошибка при компиляции: (Visual C++ 6.0)
    Code:
    --------------------Configuration: Unit1 - Win32 Debug--------------------
    Compiling...
    Unit1.cpp
    C:\Documents and Settings\*******************\exe\Unit1.cpp(110) : error C2065: 'StatusOnTaskBar' : undeclared identifier
    C:\Documents and Settings\*******************\exe\Unit1.cpp(243) : error C2374: 'i' : redefinition; multiple initialization
            C:\Documents and Settings\*******************\exe\2\Unit1.cpp(161) : see declaration of 'i'
    Error executing cl.exe.
    
    Unit1.exe - 2 error(s), 0 warning(s)
    Кто может помочь?
     
    1 person likes this.
  5. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    StatusOnTaskBar нужно указать прототип перед ее использованием
    скорее всего у тебя два цикла и ты два раза написал int i...
    так как кода ты не привел это всего лишь догадки.
     
    1 person likes this.
  6. DRON-ANARCHY

    DRON-ANARCHY Отец порядка

    Joined:
    4 Mar 2005
    Messages:
    713
    Likes Received:
    142
    Reputations:
    50
    Народ! Спрашиваю еще раз ибо надо...
    как при помощи указателей можно составить список целых чисел(вводится с клавиатуры) и потом посчитать сколько в нем содержится максимальных элементов. То есть найти самый большой и посчитать сколько таких в этом списке...
    Если можно - то напишите сразу код плз. А то я с указателями вообще на "вы"... а задачу надо сдать =\
    PS: у меня борландовский цпп... так что модуля algorithm там нет) вобщем на циклах писать или как-то так... спасибо заранее

    СПАСИБО. ПРОБЛЕМУ УЖЕ РЕШИЛ
    если кому интересно, то вот решение... может пригодится...
    Code:
     #include <stdio.h>
     
    struct tlist
    {
      long value;
      tlist *next;
    };
     
    void main(void)
    {
      tlist *list=NULL,*t=NULL,*t2;
      int a;
      puts("Enter numbers; enter non-number value to finish");
      while(scanf("%d",&a)==1)
      {
        t2=t;
        t=new tlist;
        t->next=NULL;
        t->value=a;
        if(!list)list=t;
        else t2->next=t;
      }
      int cnt=0;
      t=list;
      while(t)
      {
        if(!cnt||a<t->value)
        {
          cnt=1;
          a=t->value;
        }
        else
          if(a==t->value)cnt++;
        t=t->next;
      }
      printf("Maximum %d, %d times\n",a,cnt);
    }
     
    #326 DRON-ANARCHY, 23 Sep 2007
    Last edited: 27 Sep 2007
  7. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Реализация линейного списка на С, с остальными задачами думаю сам справишься.
    http://slil.ru/24889243
     
    1 person likes this.
  8. DRON-ANARCHY

    DRON-ANARCHY Отец порядка

    Joined:
    4 Mar 2005
    Messages:
    713
    Likes Received:
    142
    Reputations:
    50
    Спасибо... но мне надо все это написать при помощи обычных модулей... то есть не насилуя так сильно мозг...
     
    1 person likes this.
  9. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    1) как обнулить массив типа char или char *?
    2) как перевести из char * массива (массив вида x[0]='0', x[1]='1', x[2]='2', x[n]='n'... итд) в тип unsigned long (чтобы было x = 0123, кстати, как убрать 0?)
     
  10. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    1) ZeroMemory()
    2) что-то вроде crt функции atol() вроде.
     
  11. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Ni0x
    1) ZeroMemory(array) ?
    2) мне нужно winapi...
     
    1 person likes this.
  12. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    1)
    Code:
    VOID ZeroMemory(
    PVOID Destination, 
    // address of block to fill with zeros
    DWORD Length // size, in bytes, of block to fill with zeros
    );
    
    2) Под винапи ты не найдешь таких функций, либо используй crt, либо сам пиши, ничего сложного не вижу.
     
    1 person likes this.
  13. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Piflit
    1) Можно в цикле обнулять по элементно:
     
    2 people like this.
  14. _PARAZIT_

    _PARAZIT_ New Member

    Joined:
    2 Oct 2007
    Messages:
    29
    Likes Received:
    2
    Reputations:
    0
    как пользоваться бинд шеллом установленым на сервере через телнет. и должно ли в телнете результат команды?
    и как пользоваться через собствииный клиент?
     
  15. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    _parazit_, ты уверен, что в ту тему запостил?
     
  16. _PARAZIT_

    _PARAZIT_ New Member

    Joined:
    2 Oct 2007
    Messages:
    29
    Likes Received:
    2
    Reputations:
    0
    ну у меня же шелл на С++...
     
  17. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    оффтоп
    >>Опера тоже на си
    >>Давайте теперь все вопросы когда будем сидеть в этом броузере задавать только в этой теме
     
  18. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    _PARAZIT_, а ну да... Это сильно меняет дело... Я то думал, как ты к этой теме смог отнести... :) Шелл на то и шелл, что он должен принимать команды, выполнять и отдавать результат клиенту. Коннектится нужно на соответствующий прибинденный порт, клиент любой, передающий RAW-данные в сокет, в общем любой telnet-совместимый. Как пользоваться? Вводить команды, определённый в системе...
     
  19. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    функция SetFilePointer возвращает the low-order DWORD of the new file pointer. что это такое? хендл на файл, начинающийся с нового поинтера?
     
  20. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Piflit,
    функция при успешном результате вернет младший байт установленной позиции.
     
Thread Status:
Not open for further replies.