[ 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. enigma

    enigma Member

    Joined:
    10 Jul 2011
    Messages:
    80
    Likes Received:
    15
    Reputations:
    7
    Если я не ошибаюсь, но вроде wcstombs_s не понимает кириллицу..(на тот случай если это надо)
     
  2. SerpentRider

    SerpentRider New Member

    Joined:
    3 May 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Можно вот так:

    Code:
    LPSTR WtoA(LPWSTR in)
    {
    	LPSTR p = (LPSTR)in;
    	for(unsigned i = 0; p[i*2];i++)
    	{
    		p[i] = p[i * 2];	
    	}
    	return p;
    }
    
     
  3. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Латиница занимает 1 байт.
    Явно не подходит ваш вариант.
     
  4. SerpentRider

    SerpentRider New Member

    Joined:
    3 May 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    проверишь?
     
  5. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    Как получить список днс серверов зная хост,
    типа функции
    Code:
    (PHP 5)
    dns_get_record — Fetch DNS Resource Records associated with a hostname
    только под винду, на с++
     
  6. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Не буду.
    Так как знаю, что юникод занимает от 2 до 6 байт, меняя свой размер в зависимости от языка.
     
  7. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Юникод бывает разных кодировок, например UTF-8 (от 1 до 6 байтов), либо UCS-2 (2 / 4 байта).
     
  8. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Да, от 1 до 6 байт я имел в виду. Все равно удвоение массива не имеет смысла.
     
  9. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Вообще, способ SerpentRider'а должен прокатить для латинских символов и кодировки UCS-2, где латинские символы занимают 2 байта, причем старший - ноль. Он массив не удваивает, а урезает до однобайтового.
     
  10. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Да, действительно.
     
  11. SerpentRider

    SerpentRider New Member

    Joined:
    3 May 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Человек просил конверт из LPWSTR в char*.

    Идем смотрим в объявление типа студии:

    LPWSTR
    --->
    typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
    --->
    typedef wchar_t WCHAR; // wc, 16-bit UNICODE character
     
  12. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Выше я написал, что я согласился.
     
  13. DeepBlue7

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

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Спасибо, помогли :).

    Теперь другой вопрос. Как из DLL-ки можно вызвать окно консоли, и вывести туда какой либо текст ?
     
  14. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    http://msdn.microsoft.com/en-us/library/ms681944%28v=vs.85%29.aspx
    http://msdn.microsoft.com/en-us/library/ms687401%28v=VS.85%29.aspx
     
  15. ubuntu

    ubuntu New Member

    Joined:
    28 Dec 2009
    Messages:
    34
    Likes Received:
    0
    Reputations:
    0
    в исходном коде старницы есть строка, которую мне нужно отпарсить.
    для более точного париснга нужно указать поиск по след строке:
    Code:
    <div class="right"><a href="/Teams/Details/36257"><b>
    но я не могу записать эту строку в переменную, так как не знаю как в с++ заменяется двойная кавычка. подскажите пожалуйста.

    и еще можно вместо 36257 указать макрос, чтоб при парсинге он искал все строки с похожим содержанием.
    т есть такие:

    <div class="right"><a href="/Teams/Details/00001"><b>
    <div class="right"><a href="/Teams/Details/00002"><b>
    ...
    <div class="right"><a href="/Teams/Details/99999"><b>
     
  16. enigma

    enigma Member

    Joined:
    10 Jul 2011
    Messages:
    80
    Likes Received:
    15
    Reputations:
    7
    Экранируй кавычки обратным слешем

    char stroka[] = "<div class=\"right\"><a href=\"/Teams/Details/36257\"><b>";
    string stroka = "<div class=\"right\"><a href=\"/Teams/Details/36257\"><b>";
     
  17. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Есть весьма забавный код. Он работает, если закомментить строку f.x; . Если это сделать, все нормално собирается. Что же тогда такое - Foo f в таком случае?

    PHP:
    #include <iostream>
    #include <cstdlib>

    using std::cout;
    using std::endl;

    class 
    Bar
    {

    };

    class 
    Foo
    {
    public:
       
    Foo(Bar b);
       
    int x;
    };

    Foo::Foo(Bar b)
    {
       
    cout << "Foo::Foo()" << endl;
    }

    int main()
    {
       
    Foo f(Bar());
       
    f.x// закомментировать эту строку.
       
    return EXIT_SUCCESS;
    }
     
  18. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Компилятор воспринимает Foo f(Bar()); как объявление функции, возвращающей Foo, и принимающей указатель на функцию, возвращающую Bar, без аргументов.

    Сделай так:
    PHP:
    int main()
    {
        
    Bar b;
        
    Foo f(b);
        
    f.x;
        return 
    EXIT_SUCCESS;
    }
     
    1 person likes this.
  19. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Интересно также вот что. Есть стандартное объявление new

    PHP:
    void *operator new (size_t)
    Выглядит достаточно просто. Однако, вопросы начинаются, когда мы пишем

    PHP:
    Foo *= new Foo;
    Ни намека на sizeof(Foo). Больше похоже на template. Каким образом срабатывает new?
     
  20. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Вообще-то это на уровне C++ такое определение оператора new. Скажем, тебе же C++ не даст определить оператор = с двумя аргументами внутри класса. Есть еще пара других форм new, но они тоже предопределены C++.
     
    #6640 GRRRL Power, 27 Jul 2011
    Last edited: 27 Jul 2011
Thread Status:
Not open for further replies.