Можно ли объединить строковый литерал с символом *? - PullRequest
0 голосов
/ 20 февраля 2019

Я знаю, что в С смежные строковые литералы объединяются.Я хочу знать, конкатенации ли смежных строковых литералов с 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?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

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

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

0 голосов
/ 20 февраля 2019

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

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