2017-12-19 29 views
-4

을 작동하지 않습니다 내가 내가이 코드를 작성하고 있지만, 내가 많은 사용자가 원하는 길이의 문자열을 받아 it.so이를 표시하는 코드를 작성하고 제대로

#include<stdio.h> 
#include<stdlib.h> 
void main() 
{ 
    char *a; 
    int i,n; 
    a=(char*)calloc(1,sizeof(char)); 
    printf("enter the string\t"); 
    for(i=0;a[i]!=0;i++) 
    { 
     scanf("%[^0]c",&a[i]); 
     n=2+i; 
     a=(char*)realloc(a,(n)*sizeof(char)); 
    } 
    for(i=0;a[i]!=0;i++) 
    { 
     printf("%c",a[i]); 
    } 
    free(a); 
    a=NULL; 
} 

를 작성했지만 그건 무엇인가 루프에 들어 가지 않고 모든 입력을 허용합니다. 뭐가 잘못 됐는지 말해 줄 수있어? 당신이 calloca를 할당하기 때문에 감사

+0

왜 이것을 NULL로 끝나는 문자열 버퍼에 넣는 대신 문자로 인쇄하고 'printf'에 직접 입력합니까? 'free (a)'는 이해할 수있는 반면,'a'를'NULL '로 설정하는 것은 정말로 의미가 없습니다. – tadman

+0

일반적으로 낙관적으로 큰 버퍼를 할당하여이 문제를 해결하고 사용자가 해당 크기를 초과하면 크기를 두 배로 재 할당하십시오. 이렇게하면 잔인한 재 할당을 피할 수 있습니다. – tadman

+0

스택 오버플로에 오신 것을 환영합니다! [C에서 malloc()과 family의 반환 값을 왜 던지지 말아야하는지에 대한이 토론을 보아라.] (https://stackoverflow.com/q/605845/2173917) –

답변

1

당신은 너무 a[0]은 0 그것은 당신의 for 루프 모두의 초기 a[i]!=0 테스트를 실패하고, 루프를 입력하지 않습니다.

+0

하지만 malloc()도 작은 길이의 문자열에 대해 –

+0

문제를 해결하지 못합니다. 올바르게 작동하지만 길이가 길어지면 작동이 멈 춥니 다. –

+0

별개의 문제입니다. 왜 당신이 루프에 들어오지 않았는지 설명했습니다. 추가 도움이 필요하면 질문을 편집하고 업데이트하십시오. –