상세 컨텐츠

본문 제목

c언어 mistake_출력형식

c언어

by 빙하둘리 2022. 7. 1. 17:53

본문

728x90

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로 출력형식을 지정해주자!

728x90

관련글 더보기

댓글 영역