Можно ли объединить строковый литерал с char*?

Я знаю, что в C соседние строковые литералы конкатенированы. Я хочу знать, связаны ли смежные строковые литералы с char * s?

Причина, по которой я задаю этот вопрос, заключается в том, что я хочу передать конкатенацию двух строк в perror(), а одна из строк заранее неизвестна, поэтому я должен использовать char*.

perror("error opening " "file.txt");  // string literals are concatenated

char* filename = "file.txt";  // or some other file
perror("error opening " filename);    // will this work?

person Galaxy    schedule 20.02.2019    source источник


Ответы (2)


Нет. Конкатенация строковых литералов выполняется при трансляции (компиляции). Запрашиваемая операция должна выполняться внутри программы во время ее выполнения. Нет возможности сделать это автоматически; вы должны написать код, чтобы выделить место для результирующей строки и выполнить конкатенацию.

person Eric Postpischil    schedule 20.02.2019

Нет. Объединение смежных строковых литералов — это возможность компилятора, который обрабатывает соседние строковые литералы как один строковый литерал, чтобы помочь программистам писать читаемый код (в случае большого строкового литерала, который не помещается в строку).

C как язык не имеет оператора конкатенации, самое близкое к нему — это функция (strncat, strcat. strcpy, memcpy).

person Amadan    schedule 20.02.2019