C++ sizeof() 함수와 strlen()함수

westjiwoo·2023년 2월 8일
0

백준2675번
문자열 반복

이 문제를 풀면서 알게된 점
sizeof()-실제로 차지하고 있는 메모리 크기,NULL문자 포함
strlen()-문자열의 길이
unsigned int(부호 없는 정수)-양(+),0,음(-)
signed int(부호 있는 정수)-양(+),0

Main.cc: In function ‘int main()’:
Main.cc:15:35: warning: comparison of integer expressions of different signedness: ‘int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
   15 |                 for (int j = 0; j <strlen(S); j++)
      |                                 ~~^~~~~~~~~~

처음 제출 시 맞았습니다 판정을 받았지만 경고문이 뜸
문제점:int는 기본적으로 부호있는 정수, strlen()은 부호 없는 정수이기 때문에 둘을 비교할 때 오류가 생김
해결방법: unsigned int 앞에 (int)를 붙여 부호 있는 정수로 만들어 준다.
strlen() -> (int)strlen()

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
	int T; // 테스트 케이스의 개수
	cin >> T; 
	char S[1000]; // 문자열
	int R; // 반복 횟수
	for (int i = 0; i < T; i++)
	{
		cin >> R >> S;
		for (int j = 0; j <(int)strlen(S); j++) // 문자열의 길이를 알기 위해 strlen()함수 사용
		{
			for (int k = 0; k < R; k++)
			{
				cout << S[j];
			}
		}
		cout << "\n";
	}

	return 0;
}

0개의 댓글