2016-09-17 4 views
-1

私のプログラムは、リバースが生成されていてもリバースすることですが、問題には不要なジャンク値もあります。文字列を反転させている間に値をジャンクしますか?

問題の原因を理解できません。

#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

出力文字列をNULL終了させる必要があります。 –

答えて

1

あなたは、文字列を終了するために最後に

b[i] = 0; 

を追加する必要があります。

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'; 
} 
関連する問題