C Arduino几乎相同的功能,输出非常不同
我有3种不同的功能,可以使用Arduino和SIM900发送文本消息 第一个函数有两个参数,并将给定给它的字符数组发送到目标电话号码C Arduino几乎相同的功能,输出非常不同,c,arduino,C,Arduino,我有3种不同的功能,可以使用Arduino和SIM900发送文本消息 第一个函数有两个参数,并将给定给它的字符数组发送到目标电话号码 void sendText(char msg[], char num[]) { Serial.print("[Text] Sending text to "); Serial.println(num); simController.print("AT+CMGF=1\r"); delay(100); simController.print("AT
void sendText(char msg[], char num[]) {
Serial.print("[Text] Sending text to ");
Serial.println(num);
simController.print("AT+CMGF=1\r");
delay(100);
simController.print("AT + CMGS = \"");
simController.print(num);
simController.println("\"");
delay(100);
Serial.print("[Text] ");
Serial.println(msg);
simController.println(msg);
delay(100);
simController.println((char)26);
delay(100);
simController.println();
delay(5000);
}
最后两个函数几乎相同,只是它们的参数数量不同,结果完全不同
void sendText(char msg[], char num[], int startChar) {
char *newMsg = (char *)malloc(strlen(msg)+1);
memset(&newMsg[0], 0, sizeof(newMsg));
Serial.print("[Text] Sending text to ");
Serial.println(num);
simController.print("AT+CMGF=1\r");
delay(100);
simController.print("AT + CMGS = \"");
simController.print(num);
simController.println("\"");
delay(100);
for (int x=0;x<strlen(msg);x++) newMsg[x] = msg[x+startChar];
Serial.print("[Text] ");
Serial.println(newMsg);
simController.println(newMsg);
delay(100);
simController.println((char)26);
delay(100);
simController.println();
delay(5000);
}
void sendText(char msg[], char num[], int startChar, int endChar) {
char *newMsg = (char *)malloc(strlen(msg)+1);
memset(&newMsg[0], 0, sizeof(newMsg));
Serial.print("[Text] Sending text to ");
Serial.println(num);
simController.print("AT+CMGF=1\r");
delay(100);
simController.print("AT + CMGS = \"");
simController.print(num);
simController.println("\"");
delay(100);
for (int x=0;x<strlen(msg);x++) newMsg[x] = msg[x+startChar];
Serial.print("[Text] ");
Serial.println(newMsg);
simController.println(newMsg);
delay(100);
simController.println((char)26);
delay(100);
simController.println();
delay(5000);
}
输出如下所示
sendText("Hello","+447597865XXX");
sendText("Hello","+447597865XXX", 1);
sendText("Hello","+447597865XXX", 1, 3);
[Text] Sending text to +447597865XXX
[Text] Hello
[Text] Sending text to +447597865XXX
[Text] ello
[Text] Sending text to +447597865XXX
[Text] ell��U�����=ڨl��fr}Ѧ�o�e�6�������f��+��V���_{���
为什么会这样?请记住,
void-sendText(char-msg[],char-num[],int-startChar,int-endChar)
的正文与void-sendText(char-msg[],char-num[],int-startChar)
的memset
是错误的,特别是sizeof(newMsg)
其中newMsg
是指针。因此,sizeof(newMsg)
很可能是2或4,这取决于您的平台。第一个可能很幸运,在未初始化的内存中已经有0
将传递给malloc
的大小也用于memset
(或者仅在使用for
循环复制数据后写入字符串终止符'\0'
)
并且还要检查malloc
是否成功,即它的返回值不是NULL
编辑:要重构第二个函数,可以删除对memset
的调用并更改
for (int x=0;x<strlen(msg);x++) newMsg[x] = msg[x+startChar];
for(int x=0;x
int x;
for (x=0;x<strlen(msg);x++) newMsg[x] = msg[x+startChar];
newMsg[x] = '\0'; // Or just 0, it is equivalent