c - 传递 C 字符串并将其与本地指针一起使用

标签 c string pointers initialization variable-assignment

查看来自 The Evils of Arduino Strings 的代码

void PrintString(const char *str) {
    const char *p;
    p = str;
    while (*p) {
        Serial.print(*p);
        p++;
    }
}

我正在考虑减少/压缩它。首先,这似乎是等价的:

void PrintString(const char *str) {
    const char *p;
    p = str;
    while (*p)
        Serial.print(*p++);
}

现在,看看前两行,我怎样才能将后面两行组合起来,这可能吗?

    const char *p;
    p = str;

我可以这样做吗?

    const char *p = str;

这看起来很有可能,但看起来不平衡,因为右侧缺少星号。我试过了,它似乎可以工作,但我想知道它是否正确,并且担心我以后会遇到一些hard-to-track-down运行时错误,进一步向下行。

但是,下面这一行显然是错误的(因为它会将指针 p 更改为指向由 C 字符串 str 的第一个字符的值给出的位置>):

    const char *p = *str;

最佳答案

这是混淆。原始代码非常清楚,无需更改任何内容。您的更改会降低其可读性。

可以做的是稍微增加可读性,这是一个表面上的改变,是使用 for 循环代替:

void PrintString (const char *str) 
{
    for(const char* p=str; *p != '\0'; p++)
    {
        Serial.print(*p);
    }
}

或者:

void PrintString (const char *str) 
{
    for(size_t i=0; str[i] != '\0'; i++)
    {
        Serial.print(str[i]);
    }
}

关于c - 传递 C 字符串并将其与本地指针一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833699/

相关文章:

c - 如何标记 c 中的整行输入?

c - 在 C 中使用 DLL

java - String.intern() 的性能损失

c - 将 printf 转换为 printf x[i],其中 i 的实际值不是 "x[i]"

R 将表连接成字符串

c - 我们如何将整个段落作为二维数组中的输入作为单独的行?

c - c中函数的垃圾值

c++ - 二维数组访问冲突

c - C语言计算字符数、行数和单词数的程序

c - C 会自动释放没有指针的内存吗?