Как добавить значение переменной внутри текстовой переменной в C

#c #c 11 #c 14

#c #c 11 #c 14

Вопрос:

В моем коде C я выполняю некоторые команды с использованием Python следующим образом:

 std::string word = "Something";
std::cout << word;                         //will execute using C  
PyRun_SimpleString("import sys");          // will execute using Python
  

Проблема в том, как перейти word на Python?

Я хочу что-то вроде этого: PyRun_SimpleString("Hello %" %word);

В Python вы можете сделать: "Hello {}".format(word) и результат "Hello Something"

Я нашел что-то вроде этого: sprintf(str, "hello %s", word); Но проблема в том, что printf or sprintf отправит его на консоль и не вернет значение word.

Комментарии:

1. sprintf не отправит его на консоль.

2. Спасибо. итак, могу ли я использовать это в моем примере следующим образом: new_word = sprintf(str, "Hello %s", word); ?

3. sprintf() возвращает количество символов, скопированных в str . Вам понадобятся выходы new_word = str; после sprintf() . Но вы действительно не должны использовать sprintf() в любом случае. Это способ форматирования строк на языке Си. Способ C заключается в использовании std::string::operator или std::ostringstream вместо

Ответ №1:

В C для объединения объектов используется std::string оператор.

PyRun_SimpleString() принимает const char* в качестве входных данных. std::string имеет c_str() метод получения const char* для строки.

Итак, вы можете сделать это:

 std::string s = "Hello "   word;
PyRun_SimpleString(s.c_str());
  

Или просто это:

 PyRun_SimpleString(("Hello "   word).c_str());
  

В качестве альтернативы вы можете использовать std::ostringstream вместо этого для создания форматированной строки:

 std::ostringstream oss;
oss << "Hello " << word;
PyRun_SimpleString(oss.str().c_str());
  

Комментарии:

1. Большое вам спасибо, это действительно полезно.

2. Примечание: Нет operator для числовых значений (int, unsigned long, float, double, …), только для символов, C-строк и std::string . Так что, если вам нужно первое, вы бы использовали std::ostringstream вариант…