2014-04-23 3 views
0

문자열을 입력하고 표준 출력에 표시해야합니다.C - char 포인터 및 char 포인터 문자열 관리

이상적인 솔루션은 char 포인터 배열로 문자열을 가져 오는 것이지만, scanf에서 오류가 발생합니다. char 포인터 문자열 솔루션에는 할당 된 공간이 없기 때문에 제가 생각합니다.

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

#include <string.h> 


int main(void) { 

char *charString; 



printf("Input string - max %i caratteri: ",CHARARRAYSIZE); 
scanf("%s", charString); 

printf("%s",charString); 


    return EXIT_SUCCESS; 
} 

그러므로 나는 char 배열로로 고통 취득에 의지하고 사용 나는 그의 strcpy를 sayng strcpy를 호출 그 말을 경고가이 경우에는 문자 포인터 string.v로 (strcpy와)을 복사 생체하지 않고. 이 문제를 어떻게 해결할 수 있습니까?

아래 두 번째 사례 코드를 확인하십시오.

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

#include <string.h> 



#define CHARARRAYSIZE 16 


int main(void) { 

char *charString; 
char charArray[CHARARRAYSIZE]; 


printf("Input string - max %i characters: ",CHARARRAYSIZE); 
scanf("%s", charArray); 

strcpy(charString,charArray); 

printf("%s",charString); 


return EXIT_SUCCESS; 
} 

내 목표를 달성하고

+0

'charString'에는 여전히 메모리가 할당되어 있지 않으므로 복사 작업을 어떻게 수행 할 것으로 기대하십니까? 포인터가 가리키는 힙 공간을 할당하려면'malloc'을 사용해야합니다. – millinon

답변

1

당신은 문자 공간을 할당 할 필요가 char 배열 사용하지 않도록 할 수있는 방법이 있나요 :

charString = malloc(CHARARRAYSIZE+1); 

을 나중에, 당신은 그들에게

을 확보해야
free(charString); 
2

아무 것도 가리 키도록 포인터를 초기화하지 마십시오. malloc()을 사용하여 힙에 메모리를 할당 할 수 있지만 완료하면 메모리가 누출 될 수 있으므로 free()인지 확인하십시오. 예를 들어, 다음과 같이하는 원래의 코드 블록을 변경 :

/* You need + 1 to store the terminating null character. */ 
char * charString = malloc(CHARARRAYSIZE + 1); 

/* ... */ 

free(charString); 
return EXIT_SUCCESS; 
+0

감사합니다. 당신의 대답을 위해. 그것이 문제였습니다. 그러나 @Johnny Mopp은 당신보다 낮은 평판을 가지고 있기 때문에, 나는 그것이 당신보다 더 많은 도움이 될 것처럼 그의 대답을 받아 들일 것입니다. 너 괜찮 니? – geraldCelente

+0

@geraldCelente 궁극적으로 그것은 당신의 부름입니다. SO 지침서는 동일한 질문으로 미래의 방문자를 도울 수있는 가장 유용한 답변을 수락하는 것입니다. – cdhowie

+0

감사합니다. 어쨌든 도와 주셔서 대단히 감사합니다. – geraldCelente

1

문자 배열을 사용하는 모든 .... strcpy(charString,charArray);은 아직 정의되지 않은 주소로 쓰고 당신을 도움이되지 않습니다!

에 데이터를 검색 할 공간이 있어야합니다. 그 공간은 로컬 (지역 문자 배열 등) 일 수도 있고 다른 곳 (예 : malloc() 할당) 일 수도 있지만, 현재하고있는 일이나 나쁜 일이 일어날 때 무작위 일 수는 없습니다.