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

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

    Joined:
    5 Sep 2012
    Messages:
    388
    Likes Received:
    72
    Reputations:
    124
    Ты в 4 байта пихаешь 8, затираешь служебную инфу, финиш.
     
  2. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Угу ... так если поставить char buff[9], то проблема все ровно остается, в конце добавляются какие-то символы
     
  3. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    memset используй.
    Сначала нулями забей, потом используй.

    Code:
    memset(buffer,0,sizeof(buffer));
     
  4. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Не помогло :(
     
  5. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Code:
    #include <string.h>
    #include <stdio.h>
    
    void main() {
        char buff[3];
        char new_buff[3];
        memset(buff, 0, sizeof(buff));
        memset(new_buff, 0, sizeof(new_buff));
        strcpy(buff, "11.11.11");
        strncpy(new_buff, buff, 2);
        printf("%s", new_buff);
    
    Так работает.

    И так тоже:
    Code:
    void main() {
        char buff[3];
        memset(buff, 0, sizeof(buff));
        strcpy(buff, "11.11.11");
        strncpy(buff, buff, 2);
        buff[2] = '\0';
        printf("%s", buff);
    
    А вообще делай buff больше, так как ты затираешь данные после 3 байт.
     
  6. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    угу, спасибо парни .... второй вариант получился.
     
  7. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Подскажите пожалуйста, как передать функции структуру, а потом вернуть ее из функции по полям.
     
  8. FunOfGun

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

    Joined:
    5 Sep 2012
    Messages:
    388
    Likes Received:
    72
    Reputations:
    124
    Code:
    struct test{
    	int var;
    };
    
    test func(test var){
    	var.var++;
    	return var;
    }
     
    так? в смысле по полям?
     
  9. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    В смысле есть структура, в которой больше одного поля. Нам эту структуру надо передать функции, в функции с ней что-то сделать, ну это не суть, а потом эту структуру каким-то образом вернуть из функции по полям, то есть можно одно поле вернуть через return, а вот остальные другие поля как вернуть не представляю понятия. В общем суть в том, как из функции вернуть больше одного значения, то есть сразу все значения полей.
     
  10. FunOfGun

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

    Joined:
    5 Sep 2012
    Messages:
    388
    Likes Received:
    72
    Reputations:
    124
    Дык в моем примере из функции как раз и возвращается структура с любым количеством полей
     
  11. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    в чем проблема записать изменения в ту же структуру, или в другую? ниже показаны оба способа.

    Code:
    #include <iostream>
    
    struct Point
    {
    	int x;
    	int y;
    };
    
    void zero_point(Point &p)
    {
    	p.x = 0;
    	p.y = 0;
    }
    
    void copy_incremented_point(const Point &src, Point &dest)
    {
    	dest.x = src.x + 1;
    	dest.y = src.y + 1;
    }
    
    int main()
    {
    	Point a;
    	Point b;
    
    	zero_point(a);
    	std::cout << a.x << ':' << a.y << std::endl;
    
    	copy_incremented_point(a, b);
    	std::cout << a.x << ':' << a.y << std::endl;
    	std::cout << b.x << ':' << b.y << std::endl;
    
    	return 0;
    }
    
     
  12. Ptr

    Ptr New Member

    Joined:
    1 Oct 2011
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    std::tuple (CPP11)
     
  13. The46Doctor

    The46Doctor New Member

    Joined:
    31 May 2012
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    А как подключить новый модуль через visual studio ? например curl
     
  14. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    например http://curl.haxx.se/libcurl/c/visual_studio.pdf
     
  15. SVAROG

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

    Joined:
    13 Feb 2007
    Messages:
    424
    Likes Received:
    86
    Reputations:
    -1
    В c++ помощью gdi+ на VS 2010 делаю скриншот экрана и сохраняю через функцию bitmap.Save
    Code:
    GetEncoderClsid(L"image/jpeg", &clsid);
    bitmap.Save("D:\\screen.jpeg", &clsid);
    Каким образом в имя файла вставить время и дату?
    Например 16_00_31_26_06_13_screen.jpg/

    Получил нужное имя
    Code:
    char buffer[30];
     SYSTEMTIME time; GetLocalTime(&time);
     sprintf(buffer,"\r\n%02d_%02d_%d %02d_%02d_%02d.jpg",time.wDay, time.wMonth,time.wYear,time.wHour,time.wMinute,time.wSecond);
    
    Но компилятор ругается
    Code:
    error C2664: Gdiplus::Status Gdiplus::Image::Save(const WCHAR *,const CLSID *,const Gdiplus::EncoderParameters *): невозможно преобразовать параметр 1 из "char [30]" в "const WCHAR *"
     
    #7675 SVAROG, 26 Jun 2013
    Last edited: 26 Jun 2013
  16. GRRRL Power

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

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Если в Visual Studio, то как-то так:

    Code:
    WCHAR buffer[30];
    SYSTEMTIME time;
    GetLocalTime(&time);
    swprintf(buffer, L"%02d_%02d_%d %02d_%02d_%02d.jpg", time.wDay, time.wMonth, time.wYear, time.wHour, time.wMinute, time.wSecond);
    
     
    1 person likes this.
  17. SVAROG

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

    Joined:
    13 Feb 2007
    Messages:
    424
    Likes Received:
    86
    Reputations:
    -1
    Спасибо, получилось.
     
  18. greki_hoy

    greki_hoy Member

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

    Code:
    HRESULT StringCchPrintf(          LPTSTR pszDest,
        size_t cchDest,
        LPCTSTR pszFormat,
         ...
    );
    
    из strsafe.h а то когда нибудь нарвётесь...
     
    1 person likes this.
  19. GRRRL Power

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

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Можно и без буста хорошо и безопасно отформатировать стандартной библиотекой, std::stringstream + iomanip. Я просто привел максимально простой сишный код по образцу автора.
     
  20. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    можно но я не люблю форматировать через iomanip наверное сказывается сишный опыт привык к printf манипуляторам... поэтому и посоветовал из этой же серии...

    кстати я вот буквально вчера использовал boost::format для сборки сложных пакетов и случилось так что аргументов добавил или убавил уже не помню а спецификаторы в строке формата забыл поправить так boost::format тут же кинул исключение что количество спецификаторов не соответствует числу аргументов... а sprintf просто отнял бы время на исправление бага...
     
Thread Status:
Not open for further replies.