문자열 공부중인데.. scanf로 문자열 입력시
풀큰
질문 제목 : scanf질문 요약 :scanf질문 내용 :
문자열 공부중인데..간단하게 이 코드를 실행하면 strncpy에 대해 경고가 발생합니다.arr1과 arr2의 초기화를 해주지 않고 문자열을 입력하면 두번째 printf문에서
10개의 문자열이 출력되고 그 뒤로 이상한 문자열들이 출력되고 마지막에 다시 입력했던 문자열들이 나옵니다.
scanf함수 대신
fgets(arr1, sizeof(arr1), stdin); 를 입력하는게 더 좋지만 그래도 출력시에쓰레기값은 동일하네요..
(최근에 배움..이거 문자열 입력할때는 정말편리하더라구요)
아무리 문자열 뒤에 쓰레기값이 들어가있다 해도출력 결과는 동일해야 하는것 아닌가요?
arr1에도 그러면 입력한 문자열 뒤로는 쓰레기값이 들어있으니 똑같이 출력되어야 맞는것같은데..
뭐 0으로 초기화해주면 문제없이 출력되니 그냥 넘어가자가 아니라 이유를 알고싶습니다..
산넘어 산이네요 ㅎㅎ..
#includestdio.h
#includestring.h
intmain(void)
{
chararr1[100]={0};
chararr2[100]={0};
scanf_s(%s,arr1,100);
strncpy(arr2,arr1,10);
printf(arr1:%s\n,arr1);
printf(arr2:%s\n,arr2);
return0;
}
-----------------------------------------------------------------------
woc505님 답변 감사합니다.
하나만 더 질문드리자면..
NULL문자를 포함시켜주기 위한 함수는 따로 없는건가요?
이런식으로 직접 NULL문자를 포함시켜주어야 하나요?#includestdio.h
#includestring.h
intmain(void)
{
chararr1[100];
chararr2[100];
intlength;
fputs(복사할문자열의길이를입력하세요:,stdout);
scanf_s(%d,&length,1);
fflush(stdin);
fputs(문자열을입력하세요:,stdout);
fgets(arr1,sizeof(arr1),stdin);
strncpy(arr2,arr1,length);
arr2[length]=NULL;
printf(arr1:%s\n,arr1);
printf(arr2:%s\n,arr2);
return0;
}
-
장미빛볼살
While문쓰셔서 널값찾을때 까지돌리셔용.