[C] не доходит)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 6 Feb 2013.

  1. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    Всем здравствуйте.Проблема такого рода:
    студия настроена по статье слеша
    https://forum.antichat.ru/thread270620-%EE%EF%F2%E8%EC%E8%E7%E0%F6%E8%FF+%EF%F0%EE%E3%F0%E0%EC%EC.html
    во первых выползает вот это
    у меня есть два массива типа int по 1 кб.
    если я объявляю как static int mas[1024];
    то "__chkstk" не вылетает,но в тоже время появляется
    суть кода: один массив-пустой.второй массив-уже известные данные.дальше в массив пустой читается из файла какое то число байт.после чего в цикле я хочу присвоить второму массиву эти байты таким планом:

    Code:
    for(i=115;i<=200;i++) 
    { 
    mas[i]=buf[i]; 
    }
    
    и записываю mas в файл.открыв файл я увидел эти байты,но между каждым из них по 3 байта нуля.так вот вопрос:какого хрена?)и как мне нормально писать. хотел попробовать скопировать через memcpy- тоже не допустимый символ.выделять память я не хочу ибо это уже уступки среде)
     
  2. hardman

    hardman New Member

    Joined:
    5 Jul 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    скорее всего ты пишешь из одного массива с типом char в массив стипом int вот и получается. Int в венде 4 байта, а char 1 байт. Скорее всего так, могу ошибаться, если не так поправьте. По первой ошибке скорее всего не подключил библиотеку где есть эта функция.
     
  3. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    определяю как int оба
     
  4. hardman

    hardman New Member

    Joined:
    5 Jul 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Если включить режим паранои, то если данные приходят из интернетов, то они могут отличаться big-endian или little-endian. В интернетах передаеться в big-endian, а процессоры Intel предпочитают little-endian. Возможны проблемы с выравниванием (data aligment). Почитать можно тут , предполагаю что говрим мы в контексте разработки под Win.
     
  5. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    да не в этом вовсе дело.ппц столько мороки легче уже на делфи написать.
     
  6. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    upd сделал на делфе.можно дел
     
  7. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,309
    Reputations:
    327
    C/C++ -> Code Generation -> Security Check: No

    ясное дело, массив то теперь не из стека аллоцируется

    упд, а чем ты удивлен, int iA = 3; sizeof (int) == 4,
    стало быть в файл запишется 03 00 00 00

    если хочешь резать, то элементарно:
    WriteFile(hFile, &iA, 1, &written, NULL)
     
    #7 sn0w, 6 Feb 2013
    Last edited: 6 Feb 2013
  8. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    я переделал на байтовые массивы,там все настроено как надо.вылазит неразрешимый memcpy хотя я его нигде не юзаю,а юзаю цикл,но видимо оно где то там юзается.рыться в ассемблерном листинге желания нету.
     
  9. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,309
    Reputations:
    327
    memcpy может использоваться в любой сторонней функции, необязательно явно тобой. вроде и в какихто операторах тоже используется
     
  10. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    тот же сорс скомпилил в Пеллес С и с дефолтными настройками получил вес в 10 кб без всяких настроек и извращений.тему делл.