我用st nucleo和Shiled GSM(SIM900)编写了这个简单的程序。我想将答案保存在字符串变量中。 我将数据保存在变量中。一切正常,但是当我使用printf命令时, 我有这个错误:
cannot pass object of non-pod type 'string' (aka 'basic_string<char,char_traits<char>,allocator<char>') through variadic method; call will abort at runtime (Wnon-pod-varargs)
#include "mbed.h"
#include <string>
Serial pc(SERIAL_TX, SERIAL_RX); // PC comunication
Serial SIM900(PA_9, PA_10); // serial comunication
DigitalOut myled(LED1);
DigitalOut sim_power(D9); //power gsm900
string result;
char x;
int i;
void callback_rx() {
while (SIM900.readable()) {
x = SIM900.getc();
result += x;
pc.putc(x); }
pc.printf("%s",result); //her i have error
}
void controlAT(){
result = "";
SIM900.printf("AT\r");
wait_ms(1000); }
int main()
{
power();
pc.printf("\r\n GSM 900 TEST\n");
SIM900.attach(&callback_rx); //call interrupt
SIM900.baud(9600);
while(1) {
controlAT();
wait_ms(300);
}
}
我不知道问题出在哪里;你能救我吗?
答案 0 :(得分:3)
使用:
pc.printf("%s", result.c_str());
s
转换规范需要一个C字符串参数(即char
的空终止数组)。
答案 1 :(得分:1)
使用%s特定程序时,必须在printf中使用C样式字符串。如果使用printf,则必须使用c_str()将其转换为C样式字符串。以下解决方案适用于您的情况
1. pc.printf("%s", result.c_str());