繁体   English   中英

在 C 结构中递增字符指针

[英]Incrementing char pointer inside C struct

对于 C 中的 char 变量,您通常可以像这样通过 char 指针递增(这个例子只是去掉了字符串中的空格):

void remove_spaces(char *str)
{
    const char *ptr = str;

    do
    {
        while (*ptr == ' ')
        {
            ++ptr;
        }
    } while (*str++ = *ptr++);
}

int main()
{
    char string[20];
    strcpy(string, "foo bar");
    remove_spaces(string);
}

如果您传递这样的结构:

struct line
{
    char string[20];
    char something_else[20]
};

void remove_spaces(struct line *str)
{
    const char *ptr = str->string;

    do
    {
        while (*ptr == ' ')
        {
            ++ptr;
        }
    } while (str->string++ = *ptr++); // incorrect syntax
}

int main()
{
    struct line str;

    strcpy(str.string, "foo bar");
    remove_spaces(&str);
}

在 while 循环中增加这一行的正确语法是什么:

while (str->string++ = *ptr++);

(注意:我需要将整个结构传递给函数,因为结构的其他成员也会有其他操作)

结构体中的字符串是字符串。 您不需要为后者发明任何特殊处理。 您已经知道如何处理字符串。 保留原来的remove_spaces函数,完全忘记第二个变体。

remove_spaces(str.string);

就这样。

您需要第二个指针:

void remove_spaces(struct line *str)
{
    const char *ptr = str->string;
    char *ptr2 = str->string;

    do
    {
        while (*ptr == ' ')
        {
            ++ptr;
        }
    } while (ptr2++ = *ptr++); // incorrect syntax
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM