안녕하세요. C언어 이제 막 시작한 초짜중에 초짜입니다 ㅠㅠ
회문 찾는 프로그램( 예: level, noon과 같이 앞뒤가 같은 단어) 을 만드는데요...
배열 2개를 만들어 입력받은 배열에 있는 값을 거꾸로 다른 배열로 넣으려고 합니다.
그런데 배열을 뒤집어서 넣는 과정에서 오류가 발생하네요 ㅠㅠㅠㅠㅠㅠ
컴파일은 되는데 실행값이 이상해요 ㅠㅠ 도와주세요!!!ㅠㅠㅠㅠㅠㅠ
실행결과 사진도 함께 첨부해놨습니다.
#include <stdio.h>
int main(void)
{
char str[100];
char STR[100];
int i;
int j=0;
printf(\"단어입력:\");
scanf(\"%s\",str);
for(i=99;i>=0;i--)
{
if(str[i]!=\'\\0\')
{
STR[j]=str[i];
j++;
}
}
printf(\"%s\",STR);
}
문자열 뒤집기는 프갤의 오랜 떡밥중 하나지.
진정하세요 여긴 중환자실입니다
출혈이 많아 #include<string.h>를 시전한후
_strrev(str);를 호출했어요
이제 어느정도 진정이 될거요
char str[100]={0, }; char STR[100]={0, }; 초기화를 하거라 용사여..
초기화가 왜 필요하죠?? 그리고 책 진도에 맞추는거기땜에 함수없이(모르기도 하지만) 풀어보고 싶은데;;;
#include <stdio.h> #include <string.h> void main(){ char str[100]; gets_s(str); puts(_strrev(str)); }
종겨르!
초기화는 해도되고 안해도되는데 char배열 선언한 후에 사용할 함수에 따라서 해야될경우가 있음
저경우에 문제는 scanf로 문자열을 받으면 메모리 상태가
초기화가 왜 필요하다니. 좋은 마음가짐이다
str[100] = { \'입력한 글자들 ~~~~~~~~\' \'\\0\' \'여기부터 쓰레기값인데 이게 NULL이 아님\' }
이라서 그럼
근데 지금 님이 쓴 코드는 대략 \'\\0\'이 아니면 STR에 거꾸로 복사를 시전하겠다는말이 아니오
\'\\0\'이 아니면 거꾸로 복사를 시전이 아니라 str의 뒷쪽부터 for문을 돌다가 \'\\0\'을 만나면 그때부터 문자열 거꾸로 복사 시전을 하면 당장 작동은 할텐데
Release모드로 놓고 컴파일하면 쓰레기값에 \'\\0\'이 안나온다고 보장한다고 할 수 없으니 결국 문자열의 뒤부터 탐색해서 \'\\0\'을 찾는다는 방법은 절대로 사용할수가 없소
집에 인터넷이 안돼 피시방에와서 물어보는데요, 그럼 알파벳 제외한 쓰레기값으로 배열크기만큼 채워놓은후 널값 대신 그 값으로 똑같이 검사해서 해도 되겠네요;;; 위에 함수도 한번 써봐야겠네요. 감사합니다.
결국 뒤부터 탐색하는 방법을 쓰려면 str를 \'\\0\'이든 \'\\0\'가 아니든 문자열 끝난 뒤가 프로그래머가 예측할수 없는 상태로 되는걸 막기위해 무언가로 초기화시킬수밖에 없소
지금 윤성우님의 난정말 c언어...(생략) 하는데 배열 연습문제에서 약간 막히네요;;;ㅠㅠㅠㅠㅠㅠ
이해력이 좋으시구려
초기화도 사용해서 해보겠습니다. 감사합니다!
이번이 두번째 질문인데... 프겔이 허접들 공부하기 좋네요.ㅎㅎ 답변도 빠르고요 ㅋㅋ