Объединение строк
От: Lord Carlsberg Россия  
Дата: 07.09.06 05:33
Оценка:
Доброго всем времени суток. Сразу прошу прощения за "ламерский" вопрос — с сишником работаю недавно. При работе с чужими исходниками наткнулся на следующий кусок кода:
...
const char SHORT_VERSION_STRING[256]="2.1.1";
const char COPYRIGHT_STRING[256]="(C) Copyright bla-bla-bla";
...
/*____________________________________________________________________________
    Return a C string of the form:

    "Version 2.0 (C) Copyright bla-bla-bla"
____________________________________________________________________________*/

ErrCode 
GetVersionString( char theString[ 256 ] )
{
    static const char kVersionString[] =
        "Version " SHORT_VERSION_STRING " " COPYRIGHT_STRING;
...
}

Из этого я понял, что в kVersionString должно хранится объединение строк "Version ", SHORT_VERSION_STRING, " " и COPYRIGHT_STRING. Однако, при компилляции на MS VC++ 2005 компиллятор на данную конструкцию заругался следующим образом:
syntax error : missing ';' before identifier 'SHORT_VERSION_STRING'
syntax error : missing ';' before 'string'
syntax error : missing ';' before identifier 'COPYRIGHT_STRING'

Я попытался отредактировать исходник следующим образом:
...
const char SHORT_VERSION_STRING[256]="2.1.1";
const char COPYRIGHT_STRING[256]="(C) Copyright bla-bla-bla";
...
/*____________________________________________________________________________
    Return a C string of the form:

    "Version 2.0 (C) Copyright bla-bla-bla"
____________________________________________________________________________*/

ErrCode 
GetVersionString( char theString[ 256 ] )
{
    static const char kVersionString[] =
        strcat(strcat(strcat("Version ", SHORT_VERSION_STRING), " "), COPYRIGHT_STRING);
...
}

На этот раз компиллятор выдал такую ошибку: error C2099: initializer is not a constant.
Тогда я убрал из объявления kVersionString спецификатор static, чтобы kVersionString объявлялась как автоматическая переменная (на MSDN написано, что ошибка initializer is not a constant возникает только при работе с неавтоматическими переменными). На сей раз при компилляции возникла ошибка: error C2075: 'kVersionString' : array initialization needs curly braces. Насколько я понимаю, фигурные скобки требуются при инициализации массива только если массив инициализируется заданием значения каждого его элемента. Из чего я сделал вывод, что я вообще пошёл не тем путём.
Как можно решить эту задачу (объединение нескольких строк и сохранение результата объединения в другой строке)? При этом желательно как можно меньше менять исходник (в частности объявления переменных), т.к. любое такое изменение может повлечь какие-либо нежелательные последствия.
Заранее благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.