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