char 문자열 쪼개기

wksakfak의 이미지

VC++입니다.
숫자 세자리를 CHAR로 입력받고 이 값을 한자리씩 출력하는 건데요.
컴파일해보니 숫자 옆에 쓰레기값이 출력되서요.
뭐가 문제인지 모르겠습니다.

#include <stdio.h>
#pragma warning(disable:4996)
 
int main()
{
	char ch[3];
	char* ptr;
	char* dest = NULL;
 
	printf("세자리 숫자를 입력하세요\n");
	scanf("%s", &ch);
 
	ptr = ch;
	dest = malloc(sizeof(char) * 3);
	while (*ptr != NULL)
	{
		memcpy(dest, ptr, sizeof(char));
		printf("%s\n", dest);
		ptr++;
	}
	system("pause");
 
	return 0;
}
김정균의 이미지

dest가 초기화가 되지 않았기 때문에, 쓰레기가 들어갈지 안들어갈지는 케바케가 됩니다.

		memset(dest, 0, sizeof(char) * 3);
		memcpy(dest, ptr, sizeof(char));

와 같이 memset으로 초기화를 해 주세요.

다만, dest에 copy를 하기 보다는 ptr을 직접 출력해도 될 것 같은데요.

    while (*ptr != NULL)
    {
        printf("%c\n", *ptr);
        ptr++;
    }
 의 이미지

#include <stdio.h>
 
int main(void)
{
	char ch[4]; // 세자리 숫자 + NUL문자
	char *ptr = ch; // 초기화는 가급적 정의 직후에.
 
	puts("세자리 숫자를 입력하세요.");
	if (scanf(" %3[0123456789]", ch) == 1)
	// 세 자리 숫자만 입력받으려면...
	{
		while(putchar(*ptr++) > 0 && putchar('\n') > 0);
		// 취향 차이이지만, 전 간단한 게 좋습니다.
	}
	else
	{ // if를 쓸 때는 항상 else도 같이 생각하세요.
		puts("숫자를 입력받지 못했습니다.");
	}
	return 0;
}