倒转字符串时的垃圾值?

时间:2016-09-17 10:40:55

标签: c

我的程序是反向的,即使正在生成反向但问题是也存在不需要的垃圾值。

我无法理解问题所在。

#include <stdio.h>
#include<string.h>
int main()
{   
    char ar[100],b[100];
    int i,j;
    scanf("%s",ar);
    j=strlen(ar); 
    printf("%d",j);
    j-=1;
    for(i=0;j>=0;i++)    
    {
       b[i]=ar[j];
       j--;
    }
    printf("\n %s",b);
}

这是输出: enter image description here

2 个答案:

答案 0 :(得分:1)

您需要添加

b[i] = 0;

最后终止字符串。

答案 1 :(得分:1)

函数printf()取决于NUL终止字符作为停止打印的标记,因此您应该使用字符'\ 0'终止数组。还有一个函数来反转字符串会更好:

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

void m_strrev(char *str, char *output);

int main(void)
{
    char ar[100], b[100];
    //int i, j;
    scanf("%s", ar);
    /*j = strlen(ar) - 1;
    for (i = 0; j >= 0; i++)
    {
        b[i] = ar[j];
        j--;
    }
    b[i] = '\0';
    printf("%s\n", b);*/
    m_strrev(ar, b);
    printf("%s\n", b);
}


void m_strrev(char *str, char *output)
{
    char *e = str;
    while (*e) {
        e++;
    }
    e--;
    while (e >= str) {
        *output++ = *e--;
    }
    *output = '\0';
}