【问题标题】:Pointers and char arrays from strings来自字符串的指针和字符数组
【发布时间】:2018-10-16 20:43:24
【问题描述】:

嗨,我已经阅读了几个小时,仍然无法掌握之间的转换

{
    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,&amp;send[0],3),但它被硬编码为从send[] 发送3 个字节。我希望这是动态的,所以我可以发送任意长度的字符串(实际上它们总是少于 300 个 ASCII 字符)。我试图用指针做某事但放弃了(*p_tx_buffer 是我的开始尝试)。

【问题讨论】:

  • 使用TX_SEND(char * send)
  • 这会在没有标准库空间的系统上运行吗?也就是说,是不是不能包含“string.h”并调用strlen()来获取传入的字符串长度?
  • 他有strcat,所以我想strlen也很好
  • 这是一个树莓派,我有足够的空间存放库,strlen() 是用于常量字符串还是字符串数组?

标签: c arrays pointers char uart


【解决方案1】:

我想你想要

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);
}

【讨论】:

  • 感谢您,我将阅读这些功能以更好地理解它们。我喜欢 char *send,我不知道如何引用数据“string1”作为输入。
【解决方案2】:

我不会逐行查看您的代码,但我敦促您关注以下事实:

  1. 字符是字符,字符串是字符串,两者永远不会相遇。 (它们完全不同。)
  2. 'x' 是一个字符常量。
  3. “x”是一个字符串常量。
  4. 字符串是一个字符数组(以'\0' 结尾)。
  5. 当您在需要其值的上下文中提及数组(包括字符串)时,您得到的是指向数组第一个元素的指针。
  6. 当您将&amp; 放在某事物前面时,您得到的是指向该事物的指针。
  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 中的数组和指针。

【讨论】:

  • 非常感谢您让我明白这一点,我对 4、6 和 7 有一个模糊的概念,但其余的对我来说是新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2021-10-27
相关资源
最近更新 更多