字符串的指针和char数组

时间:2018-10-16 20:43:24

标签: c arrays pointers char uart

您好,我已经阅读了几个小时,仍然无法掌握

之间的转换
{
    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部分的帮助。

  1. 我希望能够像printf IE TX_SEND("AT+CGMSD=STUFF");一样运行此功能,但是我被困住了

但是我事先做了很多。

 char txsend[] = "at";
 TX_SEND(txsend);
  1. 我的TX_WRITE()内也正在使用write(fd,&send[0],3),但是它被硬编码为从send[]发送3个字节。我希望它是动态的,因此我可以发送任意长度的字符串(实际上,它们总是少于300个ASCII字符)。我尝试使用指针在其中进行操作,但放弃了(*p_tx_buffer是我的开始尝试)。

2 个答案:

答案 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)

我不会逐行介绍您的代码,但我敦促您关注这些事实:

  1. 字符是字符,字符串是字符串,并且永远都不会相遇。 (它们完全不同。)
  2. 'x'是一个字符常量。
  3. “ x”是字符串常量。
  4. 字符串是一个字符数组(以'\0'终止)。
  5. 在需要其值的上下文中提及数组(包括字符串)时,得到的是指向数组第一个元素的指针。
  6. &放在某物前面时,您得到的是指向该物的指针。
  7. 当您将*放在指针前面时,您得到的就是指针指向的东西。

把这些放在一起,我们可以写

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中的数组和指针。