Макрос для конкатенации двух строк в C

Я пытаюсь определить макрос, который предположил бы взять 2 строковых значения и вернуть их, объединенные одним пространством между ними. Кажется, я могу использовать любой персонаж, которого я хочу, помимо пространства, например:

#define conc(str1,str2) #str1 ## #str2 #define space_conc(str1,str2) conc(str1,-) ## #str2 space_conc(idan,oop); 

space_conc вернет «idan-oop»

Я хочу что-то вернуть «idan oop», предложения?

Попробуй это

 #define space_conc(str1,str2) #str1 " " #str2 

«##» используется для конкатенации символов, а не строк. Строки могут быть просто сопоставлены в C, а компилятор будет их конкатенировать, что и делает этот макрос. Сначала он превращает str1 и str2 в строки (скажем, «привет» и «мир», если вы используете его как this space_conc(hello, world) ) и помещает их рядом друг с другом с помощью простого space_conc(hello, world) строку. То есть, результирующее расширение будет интерпретироваться компилятором следующим образом:

 "hello" " " "world" 

который он объединит

 "hello world" 

НТН

редактировать
Для полноты оператора ‘##’ в расширении макроса используется, как это, скажем, у вас есть

 #define dumb_macro(a,b) a ## b 

приведет к следующему, если будет вызван как dumb_macro(hello, world)

 helloworld 

который не является строкой, а символом, и вы, вероятно, в конечном итоге получите неопределенное сообщение об ошибке, говорящее, что «helloworld» не существует, если вы не определяете его в первую очередь. Это было бы законным:

 int helloworld; dumb_macro(hello, world) = 3; printf ("helloworld = %d\n", helloworld); // <-- would print 'helloworld = 3' 
 #define space_conc(str1, str2) #str1 " " #str2 printf("%s", space_conc(hello, you)); // Will print "hello you" 

Правильно было сделать это, чтобы поместить 2 строки один рядом друг с другом. «##» не будет работать. Просто:

 #define concatenatedstring string1 string2 
  • Как разбить строку на подстроки заданной длины?
  • toUpperCase в Java не работает
  • Java: разделение запятой строки, но игнорирование запятых в кавычках
  • Как разбить строку на многосимвольный разделитель на C #?
  • Подобный строковый алгоритм
  • Обратное строковое слово Word в Word
  • Длина строки без использования метода length ()
  • Как использовать переменные в одиночных кавычках?
  • Как написать обратную косую черту (\) в строке?
  • Как добавить индексы в таблицы MySQL?
  • Как превратить формулу строки в «реальную» формулу
  • Давайте будем гением компьютера.