2017-11-26 21 views
1

여기 내 코드입니다. o/p에 3 자 이상의 알파벳이있는 단어의 경우 쓰레기 값이 생성됩니다.문자열을 역순으로 작성한 코드를 작성했습니다. 그러나 출력에서 ​​그것은 약간의 쓰레기를 생성합니다. 왜?

#include<stdio.h> 
#include<stdlib.h> 

int main(){ 
    char a[50],b[50]; 
    gets(a); 
    puts(a); 
    int len,i,j; 
    i=0; 
    while(a[i]!='\0'){ 
     i++; 
    } 
    printf("Length: %d",i); 
    //reverse 
    len = i; 
    j=len-1; 
    for(i=0;i<=len-1;i++){ 
     printf("\ni=%d j=%d",i,j); 
     b[i]=a[j]; 
     j--; 

    } 
    printf("\n___REVERSED TEXT___\n"); 
    puts(b); 


} 
+2

나 문자열을 작성 문자열의 시작 부분에 끝에서 간다; 안전하게 사용할 수 없습니다. –

+0

역으로 된 문자열을 null로 종료 했습니까? 나는 그렇게 생각하지 않는다. –

+0

문제와 관련이 없지만'i <= len-1'은'i

답변

2

처음에는 헤더에서 선언문을 사용하지 않았습니다. <stdlib.h>이 프로그램에 사용되었습니다. 그래서이 지침은

#include<stdlib.h> 

이 제거 될 수 있습니다.

는 C 표준에 따라 파라미터없이 기능 maingets는 불안전하며 C 표준에서 더 이상 지원되지 않는

int main(void) 

함수 같이 선언한다. 대신 함수 fgets을 사용하십시오.

배열 a에 저장된 문자열을 배열 b에 복사하는 경우에도 종료 제로도 결과 문자열의 끝으로 복사해야합니다.

프로그램은 다음과 같은 방법으로 볼 수 있습니다

#include <stdio.h> 

#define N 50 

int main(void) 
{ 
    char a[N], b[N]; 

    fgets(a, sizeof(a), stdin); 

    size_t length = 0; 

    while (a[length] != '\0' && a[length] != '\n') ++length; 

    a[length] = '\0'; 

    puts(a); 

    size_t i = 0; 

    for (; i < length; i++) b[i] = a[length - i - 1]; 
    b[i] = '\0'; 

    printf("\n___REVERSED TEXT___\n"); 
    puts(b); 

    return 0; 
} 

출력 문자열의 크기를 얻기 위해 string.h의

Hello, World! 
Hello, World! 

___REVERSED TEXT___ 
!dlroW ,olleH 
+0

왜'(for i = 0, j = length; i

+0

@ DavidC.Rankin 질문에 제시된 코드에 따르면 그는 "제자리에서"되돌리기보다는 문자열을 복사하고 뒤집어 쓰려고합니다. –

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

int main(void){ 
    char a[50],b[50]; 

    printf("\nWhat is the word?"); 
    scanf("%s", a); fflush(stdin); 
    int j; 

    printf("Length: %lu",strlen(a)); 
    for(j = strlen(a) - 1; j >= 0; j--){ 
     b[strlen(a) - 1 - j] = a[j]; 
    } 
    printf("\n___REVERSED TEXT___\n"); 
    printf("\n%s", b); 
} 
  • 사용 함수 나 strlen처럼 보일 수 있습니다;
  • 에 대한은()`이제까지 얻는다`사용하지 마십시오