2차원 배열을 char orig[20][50];을 선언하고
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //strtok 라이브러리
char* change(char* str);
int main(void)
{
char orig[20][50];
int num;
scanf("%d", &num); //몇 번 받을 것인지
getchar();
for (int i = 0; i < num; i++)
{
printf("문자열 입력 타임\n");
scanf("%[^\n]s", orig[i]);
getchar();
}
for (int i = 0; i < num; i++) {
printf("원본 문자열은 %s",change(orig[i]));
}
return 0;
}
char* change(char* str) //str이 문자열 포인터여서?
{
int origLen = strlen(str);
for (int j = origLen-1; j >=0; j--)
{
printf("거꾸로 한 글자씩 %s", str[j]); //여기서 오류 문자 하나하나를 출력해야 하니% c로 형식 지정
//%s 형식 지정은 틀려서 for문 내부의 print문은 물론 38행의 "곧 결과가 나옵니다."라는 출력문도 나오지 않음
}
printf("\n곧 결과가 나옵니다.");
return str; //str은 orig[i]를 가리키므로 원본 리턴 기대
}
str[j]는 문자 하나 하나여서 %c로 출력해야 되는데
그걸 무시하고 %s로 출력하니 오류가 남...
vscode 오류
visual studio code 오류
강제 종료 된다.
헤더파일이 켜지면서 다음과 같은 오류가 뜬다.
//stdio.h 헤더파일 내부 코드(600줄대 코드 중 일부)
#if defined _NO_CRT_STDIO_INLINE
;
#else
{
return __stdio_common_vfprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList);
} //여기서 x표시가 뜬다.
#endif
//예외 발생 사유)예외 발생(0x00007FFD5B1A2487(ucrtbased.dll), Project1.exe): 0xC0000005: 0x0000000000000067 위치를 읽는 동안 액세스 위반이 발생했습니다.
출력형식만 %c로 바꿔주니 코드가 잘 돌아갔다.
기본적인게 어쩌면 발목을 잡을 수 있다.
문자열 배열의 한 요소는 한 글자다. 그러니 %c로 출력형식을 지정해주자!
결론)배열의 한 요소===>한 글자씩 출력한다면 %s로 실수하지 않기! %c로 출력형식을 지정해주자!
C언어) 입력 버퍼 비울 때, getchar() 사용 시 유의사항 (0) | 2022.07.14 |
---|---|
특정 문자를 입력했을 때, 문자 하나 더 받기 (0) | 2022.07.03 |
2차원 배열로 문자열 받기(동적할당x) (0) | 2022.07.01 |
댓글 영역