对于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++);
(注意:我需要将整个结构传递给函数,因为结构的其他成员也会进行其他操作)
答案 0 :(得分:2)
结构中的字符串是字符串。您不需要为后者发明任何特殊处理。您已经知道如何处理字符串。保留原始的remove_spaces
函数,然后完全忘记第二个变体。
remove_spaces(str.string);
仅此而已。
答案 1 :(得分:1)
您需要第二个指针:
void remove_spaces(struct line *str)
{
const char *ptr = str->string;
char *ptr2 = str->string;
do
{
while (*ptr == ' ')
{
++ptr;
}
} while (ptr2++ = *ptr++); // incorrect syntax
}