我试图以不同的方式进行字符串反转

时间:2015-12-09 05:41:52

标签: c arrays string

**我正在尝试反转一个字符串所以我正在尝试将字符串带到它的最后位置,并从那里我将它存储到一个新的字符数组并打印但没有获得所需的输出**

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
        char c[10];
        printf("Enter the string:\n");
        gets(c);
        rev(c);
        return 0;
}

void rev(char c[])
{
        int i = 0,j = 0;
        char s[10];
        while(c[j] ! = '\0')//reaching to end of string
        {
                j++;
        }
        while(s[i] ! = '\0')
        {
                s[i] = c[j];//copying string c from end into string s from begining
                i++;
                j--;
        }
        s[i+1]='\0';
        printf("The string after reverse: %s",s);//printing reversed string
}

2 个答案:

答案 0 :(得分:2)

while(s[i] ! = '\0')

在上面的行中,s [i]未初始化,因此您通过访问未初始化的值来调用未定义的行为,从而导致错误的结果。

要解决此问题,您可以将条件重写为:

while(j >= 0)

除此之外,为了获得理智的结果,您需要进行以下两项更改:

  1. 最终终止应重写为:

    S [I] =&#39; \ 0&#39 ;;

  2. j的初始值应减1.(因为c [j]指向空字符)

  3. 因为i现在已超过c字符串的大小。

答案 1 :(得分:0)

问题是当你使用gets()时缓冲区通常是脏的。我建议你在gets()之前使用fflush(stdin)。

你说s [i + 1] ='\ 0'的最后一行应该是s [i] ='\ 0',在最后一次执行循环后i已经加1。

如上所述它不应该是while(s [i]!='\ 0') s没有初始化,所以上帝知道那里有什么。使它像while(j&gt; = 0),它应该工作。