#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
вариант…