您好,我已经阅读了几个小时,仍然无法掌握
之间的转换{
char i ="adf";
char foo[];
char bar[256];
}
并添加*
和&
使其更加混乱
我有一些有效的代码。
int TX_SEND(char send[])
{
unsigned char *p_tx_buffer;
p_tx_buffer = &send[0];
strcat(send, "\r");
// Write to the port
int n = write(fd,&send[0],3);
if (n < 0) {
perror("Write failed - ");
return -1;
}
return(0);
}
代码正在工作,但是我需要2部分的帮助。
printf IE TX_SEND("AT+CGMSD=STUFF");
一样运行此功能,但是我被困住了但是我事先做了很多。
char txsend[] = "at";
TX_SEND(txsend);
TX_WRITE()
内也正在使用write(fd,&send[0],3)
,但是它被硬编码为从send[]
发送3个字节。我希望它是动态的,因此我可以发送任意长度的字符串(实际上,它们总是少于300个ASCII字符)。我尝试使用指针在其中进行操作,但放弃了(*p_tx_buffer
是我的开始尝试)。答案 0 :(得分:0)
我想你想要
int TX_SEND(char *send)
{
int n = write(fd,send,strlen(send));
if (n < 0) {
perror("Write failed - ");
return -1;
}
return(0);
}
您不能加上\ n来发送strcat。我将其添加到调用函数中,或向其声明中间缓冲区和sprintf
像这样
int TX_SEND(char *send)
{
char buff[50]; // i dont know a good max size
snprintf(buff, sizeof(buff), "%s\n", send);
int n = write(fd,buff,strlen(buff));
if (n < 0) {
perror("Write failed - ");
return -1;
}
return(0);
}
答案 1 :(得分:0)
我不会逐行介绍您的代码,但我敦促您关注这些事实:
'\0'
终止)。&
放在某物前面时,您得到的是指向该物的指针。*
放在指针前面时,您得到的就是指针指向的东西。把这些放在一起,我们可以写
char str[] = "xyz";
char *p = str; /* per rule 5, this is fine, and p gets a pointer to str's first element */
char c = *p; /* per rule 7, c gets the first character of str, which is 'x' */
printf("%c\n", c);
如果您只是以C开头,那么您可能还没有遇到规则5。起初它可能会让您感到惊讶。不过,请好好学习:没有它,您将永远无法理解C中的数组和指针。