본문 바로가기
C

220809(CH25)

by 덤더리덤떰 2022. 8. 9.
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main() {
	int* pi;
	pi = (int*)malloc(sizeof(int));
	if (pi == NULL) {
		printf("동적 메모리 할당에 실패했습니다.");
		exit(1);
	}
	*pi = 100;
	printf("%d\n", *pi);
	//동적 메모리 사용한 이후에는 무조건 해당 메모리 반환
	free(pi);

}

method1.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main() {
	char arr[30];
	int i = 0;
	for (i = 0; i < 26; i++) {
		arr[i] = 'a' + i;
	}
	for (i = 0; i < 26; i++) {
		printf("%c ", arr[i]);
	}
}​

method2.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main() {
	char* pc;
	int i;
	pc = (char*)malloc(100 * sizeof(char));
	if (pc == NULL) {
		printf("동적 메모리 할당에 실패했습니다.\n");
		exit(1);
	}
	for (i = 0; i < 26; i++) {
		*(pc + i) = 'a' + i;
	}
	//i는 26까지 반복하기에 반복문을 탈출했을 때는 i가 26이다.
	*(pc + i) = 0; //맨끝에 널문자를 삽입(그럼 pc가 가리키는 배열을 계속 읽어나가다가 
	               //z까지 읽고 널문자를 만나고 문자열이 끝남을 인식하고 pc 문자열 포인터 종료)
	printf("%s\n", pc);
	//%s는 널값을 만날때까지 문자열로 인식해서 출력한다. 
	free(pc);
	return 0;
}

25-1.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main() {
	int len;
	int i;
	scanf("%d", &len);
	getchar();
	char* arr;
	arr = (char*)malloc(len * sizeof(char));
	if (arr == NULL) {
		printf("동적 할당 실패\n");
		exit(1);
	}
	fgets(arr, len+1, stdin);
	arr[strlen(arr)-1] = 0;
	len = strlen(arr); //만약 길이를 20으로 해놓고 그것보다 더 짧게 문자열 입력했을 경우 이상한 문자들 출력되는 거 방지
	for (i = len; i >= 0; i--) {
		printf("%c", *(arr+i));
	}
	free(arr);
	return 0;
}

현재 strlen은 fgets로 인해 \n도 입력받고 있기에 길이가 +1이다 따라서 arr[strlen(arr)-1]=0을 통해 널문자로 바꿔주어 널문자는 제외한 길이를 갖도록 한다.
ex)fgets을 통해 abcd 입력받으면 strlen 값은 5 (abcd'\n') 따라서 arr[4]자리에 널문자를 넣어주면 strlen은 널문자를 제외한 문자열의 개수가 정확하게 나옴

25-2.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main() {
	int* arr;
	int i=0;
	int j;
	int len=0;

	arr = (int*)malloc(5*sizeof(int));
	while(1) {
		scanf("%d", &arr[i]);
		if (arr[i] == -1) {
			break;
		}
		if (arr == EOF) {
			arr=(int*)realloc(arr, sizeof(int) * 3);
		}
		i++;
		len++;
	}

	for (i = 0;i<len; i++) {
		printf("%d ", arr[i]);
	}
	free(arr);
	
	return 0;
}

'C' 카테고리의 다른 글

220810(CH26~27)  (0) 2022.08.10
220802(CH23)  (0) 2022.08.02
220728(CH21)  (0) 2022.07.28
220726(CH13,18)  (0) 2022.07.26
220721(CH16)  (0) 2022.07.26