【问题标题】:Trim characters from end of string?从字符串末尾修剪字符?
【发布时间】:2013-11-12 05:09:37
【问题描述】:

我正在尝试修剪 ANSI C 字符串的结尾,但它在 trim 函数上不断出现段错误。

#include <stdio.h>
#include <string.h>

void trim (char *s)
{
    int i;

    while (isspace (*s)) s++;   // skip left side white spaces
    for (i = strlen (s) - 1; (isspace (s[i])); i--) ;   // skip right side white spaces
    s[i + 1] = '\0';
    printf ("%s\n", s);
}

int main(void) {
    char *str = "Hello World     ";
    printf(trim(str));
}

我似乎无法弄清楚为什么。我已经尝试了 15 种不同的 trim 函数,它们都是段错误。

【问题讨论】:

    标签: c string ansi


    【解决方案1】:

    trim函数没问题,main有两个错误: 1.str是字符串字面量,需要修改。 2.调用printf是错误的,因为trim没有返回任何东西。

    int main(void) {
        char str[] = "Hello World     ";
        trim(str);
        printf("%s\n", str);
    }
    

    【讨论】:

      【解决方案2】:

      您正在尝试修改由str 指向的字符串文字"Hello World",这会导致段错误。

      main 中将str 设为一个数组:

      char str[] = "Hello World     ";
      

      malloc它:

      char *str = malloc(sizeof("Hello World     ")+1);
      

      虽然"Hello World " 的类型为char [],但它存储在只读缓冲区中。检查输出here。这个printf(trim(str)); 也没有意义,因为你没有从trim 函数返回任何东西。

      【讨论】:

        【解决方案3】:

        char* str = "Hello world "中,字符串"Hello World "存储在只读地址空间中。尝试修改只读内存会导致未定义的行为。

        改为使用

        char str[] = "Hello World ";

        char *str = malloc(sizeof("Hello World    ")+1);
        strcpy(str, "Hello World    ");
        

        然后尝试修剪功能...

        有关如何为变量分配内存的更多信息,请参阅https://stackoverflow.com/a/18479996/1323404

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-23
          • 1970-01-01
          • 2021-09-16
          • 2013-09-11
          • 2011-02-25
          相关资源
          最近更新 更多