C仅通过指针操作即可删除字符串中的开头和结尾空格

我一直在尝试通过仅操作指针(不将字符复制到char数组)来从C字符串中删除前导和尾随空格。到目前为止的想法是这样的:

void trim_string(char *str)
{
    char *ptr = str;

    // This part removes leading spaces
    while(*ptr == ' ') ++ptr;
    while (*str++ = *ptr++);

    // This part removes trailing spaces
    str--;
    while(*str == ' ') --str;
    str++;
    *str = *ptr;
}

但是删除尾部空格的部分不起作用。

在除去前导空格部分之后,* str和* ptr应该位于字符串的末尾; '\ 0'字符。想法是将一个指针向后移到字符串中,直到检测到非空格字符,而另一个指针仍指向“ \ 0”。然后将最后一个空格字符指向另一个指针(仍然指向“ \ 0”),以终止字符串。

使用该逻辑为尾随空格部分移动/重新分配空指针的正确方法是什么?

Mp3MIN 回答:C仅通过指针操作即可删除字符串中的开头和结尾空格

自从您这样做:

tup = (50,50,50)

在这一点之后,访问while (*str++ = *ptr++); 所指向的内容不再是有效的操作(它可能会导致内存访问冲突,并且更常见的是-程序的未定义行为)。

但这正是您在代码的最后一行中所做的:

ptr

除此之外,请注意,要修剪*str = *ptr; 指向的字符串,您需要执行以下任一操作:

  • str
  • *str = 0表示str[i] = 0的一些非负整数值

因此,当您要修剪字符串时,i毫无意义。

本文链接:https://www.f2er.com/3041767.html

大家都在问