строка инициализатора для массива массива символов слишком длинная - PullRequest
0 голосов
/ 01 августа 2010

Я делаю патчер для игры, но я получаю сообщение об ошибке «строка инициализатора для массива символов слишком длинная» от Mingw.Я пытаюсь создать многомерный массив символов, содержащий функции для исправления.
Я проверил другие вопросы по этому поводу и нашел такой, где спрашивающий забыл добавить запятые в конце каждого строкового литерала, но я сделалэто уже.

Может ли кто-нибудь мне помочь?

Источник, который вызывает ошибку:

char patches2[][64] = {
    "CreateMutexW",
    "CreateRemoteThread",
    "CreateRemoteThreadEx",
    "?strcmp@unicode_string_trait@esl@@SAJPB_W0@Z",
    "??0?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@QAE@XZ",
    "??0?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@QAE@PB_W@Z",
    "??4?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@QAEAAV01@PB_W@Z",
    "?GetContent@?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@QBEPB_WXZ",
    "?SetLookUpOrder@CFileSystem@esl@@QAEXW4EFileLookUpOrder@esl_constant@2@@Z",
    "??1package_file_item@esl@@QAE@XZ",
    "??1CFormatter@esl@@QAE@XZ",
    "??6CFormatter@esl@@QAEAAV01@K@Z",
    "??6CFormatter@esl@@QAEAAV01@G@Z",
    "??6CFormatter@esl@@QAEAAV01@M@Z",
    "??6CFormatter@esl@@QAEAAV01@PB_W@Z",
    "??BCFormatter@esl@@QBE?AV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@1@XZ",
    "?__time@etc@esl@@YAKXZ",
    "?ReadFSAA@CGameOptionMgr@pleione@@QAE?AW4EFSAA@pleione_constant@2@XZ",
    "?ReadFSAAQuality@CGameOptionMgr@pleione@@QAEKXZ",
    "?CleanUp@CPleione@pleione@@QAE_NXZ",
    "?SetSkyTime@CAtmosphere@pleione@@QAEXM@Z",
    "?SetCamera@CCameraControl@pleione@@QAEXPAVCScene@2@PAVITerrain@2@KFF@Z",
    "?GetObjectId@CObject@mint@@QBE_KXZ",
    "?ReadU8@CMessage@mint@@QAEEXZ",
    "?GetLuck@IParameter@core@@QAEMXZ",
    "?GetGateLocalName@CGateMgr@core@@QBE?BV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@AB v34@@Z",
    "?GetLife@IParameterBase2@core@@QAEMXZ",
    "?GetLifeMax@IParameterBase2@core@@QAEMXZ",
    "?IsEiry@SItemEgoInfo@@QBE_NXZ",
    "?SetFog@CDungeonRegion@core@@QAEX_N@Z",
    "?GetTargetCombatPower@ICharacter@core@@QAE?AW4ECombatPower@@PBname2@@Z",
    "?GetCombatPower@IParameterBase2@core@@QBEMXZ",
    "?GetInterfaceDurability@IItem@core@@QBEKXZ",
    "?GetInterfaceDurabilityMax@IItem@core@@QBEKXZ",
    "?GetColor@IItem@core@@QBEKK@Z",
    "?IsElf@ICharacter@core@@QBE_NXZ",
    "?IsGiant@ICharacter@core@@QBE_NXZ",
    "?IsPet@ICharacter@core@@QBE_NXZ",
    "?IsNPC@ICharacter@core@@QBE_NXZ",
    "?IsNamedNPC@ICharacter@core@@QBE_NXZ",
    "?IsGoodNPC@ICharacter@core@@QBE_NXZ",
    "?Compile@CDefaultCompiler@pleione@@UAEPAVCCompiledText@2@ABV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@ABUtext_option@2@@Z",
    "?Compile@CDefaultTagCompiler@pleione@@UAEPAVCCompiledText@2@ABV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@ABUtext_option@2@@Z",
    "?Compile@CHTMLCompiler@pleione@@UAEPAVCCompiledText@2@ABV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@ABUtext_option@2@@Z",
    "?_RenderGlowOverlay@CRendererContext@pleione@@AAEXXZ",
    "?GetExploLevel@IParameterBase2@core@@QBEGXZ",
    "?GetExploExpPercent@IParameter@core@@QBEMXZ",
    "?ParseCommand@CUserConsoleMgr@core@@QBE_NABV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@AAVCUserConsole@2@@Z",
    "?Instance@CLocalizer@core@@SAAAname2@XZ",
    "?GetLocalText@CLocalizer@core@@QBE?AVCFormatter@esl@@ABV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@4@@Z",
    "?stdapi_ShowChattingMessage@core@@YAX_KABV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@1KKE@Z",
    "?stdapi_ShowCaption@core@@YAX_KABV?$CStringT@_WVunicode_string_trait@esl@@Vunicode_string_implement@2@@esl@@W4EMessageCaptionType@@KKK0@Z",
    "?stdapi_GetGlobalTime@core@@YA_KXZ",
    "?stdapi_GlobalTimeToGameTime@core@@YAX_KAAK11@Z",
    "?IsUsingNaosSupport@IServiceMgr@core@@QBE_NXZ",
    "?CheckFastStringID@IProp@core@@QBE_NPB_W@Z",
    "?IsUsableContents@IServiceMgr@core@@QBE_NW4EServiceContents@2@@Z",
    "?IsTransformed@ITransformMgr@core@@QBE_NXZ",
    "?GetFullSuitID@ICharacter@core@@QAEKXZ",
    "?IsBroken@IItem@core@@QBE_NXZ",
    "?CheckFastStringID@IItem@core@@QBE_NPB_W@Z",
    "?IsExpired@IItem@core@@QAE_N_K@Z",
    "?IsArenaField@IRegion@core@@QBE?B_NXZ",
    "?CanAttackTarget@IPVPMgr@core@@QBE_NPBVICharacter@2@@Z"
};

Ответы [ 2 ]

2 голосов
/ 01 августа 2010
char patches2[][64]

Это массив массивов. Первое измерение определяется автоматически по количеству элементов в инициализаторе. Второе измерение указано как 64 char с.

Некоторые строковые литералы, которыми вы инициализируете patches2, имеют длину более 64 символов. Вам нужно увеличить размер до некоторого значения, достаточно большого, чтобы вместить наибольшую строку C в инициализаторе.

1 голос
/ 01 августа 2010

Ну, объявление для одной строки выглядит так:

const char* myString = "MyString";

То, что вы, вероятно, хотите, это массив const char* с.Вы можете изменить char patches2[][64] на const char* patches2[] (массив указателей на const char).

Число const char* с в patches2 можно рассчитать с помощью sizeof():

const char* patches2[] = {"CreateMutexW", /* The rest... */ };
int numPatches = sizeof(patches2) / sizeof(const char*);

Поэтому, если вы добавляете / удаляете некоторые строки, вам не нужно обновлять размеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...