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

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

Причина, по которой я задаю этот вопрос, заключается в том, что я хочу передать конкатенацию двух строк 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 ответа

Решение

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

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

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

Другие вопросы по тегам