【问题标题】:Function to reverse string in C在C中反转字符串的函数
【发布时间】:2014-03-30 22:56:19
【问题描述】:

我在 C 中编写了这个函数来反转字符串,但是当切换字符串中的字符时程序崩溃了。我不知道是什么原因造成的,因此我们将不胜感激。

void reverse(char s[])
{
    char c;
    int i;
    int j;

    for (i = 0, j = (strlen(s) - 1); i < j; i++, j--)
    {
        c = s[i];
        s[i] = s[j]; //An error occurs here
        s[j] = c;
    }

    printf("%s", s);
}

main()
{
    reverse("Example");
}

【问题讨论】:

  • 您无法更改字符串文字。改用 char 数组
  • 你应该创建一个新字符串,并返回(或打印)那个
  • @user3277234 你知道,在函数中,数组实际上是指针(也就是说,你有char *s,而不是char s[])。更改 char 指针中的单个字符是未定义的行为。所以请按照@Mathias711 的建议创建一个新字符串。
  • @Diti 修改单个或多个字符是完全有效的。真正的罪魁祸首是字符串文字s指向。

标签: c string reverse


【解决方案1】:

阅读本文以获取更多信息What is the difference between char s[] and char *s?

另一个链接https://stackoverflow.com/questions/22057622/whats-the-difference-structurally-between-char-and-char-string#22057685

这应该可以解决它。

main()
{    
char array[] = "Example";
reverse(array); 
}

当您执行reverse("Example") 时,与此相同

char *string = "Example";
reverse(string) //wont work

这些链接应该可以从这里澄清您的疑问。

【讨论】:

    【解决方案2】:

    这应该可行:

    #include<string.h>
    
    int main()
    {
      char str[100], temp = 0;
      int i = 0, j = 0;
    
      printf("nEnter the string :");
      gets(str);
    
      i = 0;
      j = strlen(str)-1;
    
      while(i<j)
      {
        temp=str[i];
        str[i]=str[j];
        str[j]=temp;
        i++;
        j--;
      }
    
      printf("nReverse string is :%s",str);
    
      return(0);
    }
    

    【讨论】:

      【解决方案3】:

      "Example" 是一个字符串字面量,通常意味着你不能改变它。

      请试试这个:

      char str[] = "Example";
      reverse(str);
      

      【讨论】:

        【解决方案4】:

        您需要将字符指针作为函数中的参数:

        Void reverse (char *ptr)
        {
            // ...
        }
        

        并对指针进行操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-12
          • 2013-04-30
          • 2013-03-20
          • 2010-10-21
          • 2015-05-24
          相关资源
          最近更新 更多