반응형

두개의 문자열을 하나의 문자열로 합쳐주는 함수.

 

영단어 뜻으로는 아래와 같다.

String concatenation : 문자열을 연결, 연속 한다. (문자열을 덧붙인다.)

이를 합쳐서 strcat 라고 한다.


함수 원형:
char * strcat(char * dest, const char * scr);
char * strcat(char * dest, const char * scr, size_t n);


-> 덧붙여질 문자열의 주소 값 반환

 

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[30] = "First~";
	char str2[30] = "Second";

	char str3[30] = "simple num: ";
	char str4[30] = "1234567890";

	// case 1
	puts(str1);         //	붙이기 전.
	strcat(str1,str2);  //	str1 뒤에 str2를 이어 붙임. [First~'\0']여기 NULL 자리를 str2로 채우고 NULL을 맨 뒤로 보냄.								

	//**주의사항: str1 이 str2가 들어갈 충분한 배열공간을 갖고 있어야 뒤에 채워짐
	puts(str1);         //	붙이기 후.

	// case 2
	strncat(str3, str4, 7);		//	n은 덧붙일 문자열의 최대 길이를 제한한다. 특히 NULL문자를 포함해 복사함으로,
					//	여기서 [1234567]까지 복사되고 그 뒤에 '\0'까지 복사가 된다. 즉, 총8개의 문자가 복사되는 것임.
	puts(str3);

	return 0;
}
반응형

 

(결과) 두 문자열을 합쳐버렸다

 

 

반응형
반응형

서로 두개의 문자열을 비교해서 같으면 0을 반환하고, 왼쪽이 크면 +1 작으면 -1을 반환하는 함수이다.

아래 예를 보면 알 수 있다. (알파벳도 결국 아스키 코드이며, 그 아스키 코드값으로 비교한다)

#define _CRT_SECURE_NO_WARNINGS //  보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>

int main()
{
	printf("%d \n", strcmp("ABCD", "ABCD"));		//	같으므로 0을 반환
	printf("%d \n", strcmp("ABCD", "ABCC"));		//	C < D 이므로 s1이 값이큼. 0보다 큰값 반환.				(왼쪽이 큼)
	printf("%d \n", strcmp("ABCD", "ABCDE"));		//	ABCD까지 같으나, E값이 나와서 s2가 더 큼. 0보다 작은값 반환.(오른쪽이 큼)
	return 0;
}

결과

반응형

위 원리를 이용해서 아래와 같이 만들 수 있다.

2번의 문자열을 입력해서 그 두 문자열을 비교해서 일치여부 파악

#define _CRT_SECURE_NO_WARNINGS // fopen 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>

int main()
{

	char str1[20];
	char str2[20];

	printf("문자열 입력 1: ");
	scanf("%s", str1);

	printf("문자열 입력 2: ");
	scanf("%s", str2);

	// str1, str2가 같으면 0이 출력 그럼 False가 되는데, !(not)을 붙임으로 써 True를 만들어서 if 내부를 실행 시킴.
	if (!strcmp(str1, str2))		
	{
		puts("두 문자열은 완벽히 동일합니다.");
	}
	else
	{
		puts("두 문자는 동일하지 않습니다.");

		//	str1, str2 의 3번째 까지 문자를 비교해 일치하면 0을 반환하는데 if(False),그러나 !을 만나서 if(TRUE) 이므로 내부를 실행함.
		if (!strncmp(str1, str2, 3))				
			puts("그러나 앞 세글자는 동일합니다.");
	}

	return 0;

}

두 문자열이 같을 때

두 문자열이 다를 때

다르만 일부 조건이 맞을 때

 

 

 

 

반응형
반응형

문자열 내장 라이브러리는 #include <string.h> 을 추가해야 있다.

문자열을 복사하는 내장 함수로는 아래 두가지가 있다.

 

함수의 원형.

 

char * strcpy(char * dest, const char * src);

char * strncpy(char * dest, const char * src, size_t n);

 

 

간단한 복사 예

#define _CRT_SECURE_NO_WARNINGS // visual studio 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>


int main()
{
	// str1에만 값이 있고, str2는 초기화 값을 넣지 않음.
	char str1[20] = "1234567890";
	char str2[20];

	// str1을 str2에 복사
	strcpy(str2, str1);

	// 출력확인
	puts(str1);
	puts(str2);

	return 0;
}

(결과) str1의 값이 str2에 복사되어 출력이 가능한 것을 볼 수 있다.

** 그러나 메모리 침범의 결과를 만들 수 있는 strcpy보다, strncpy를 아래와 같이 사용하는게 안정적 코드를 만드는데 좋다.

#define _CRT_SECURE_NO_WARNINGS // fopen 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>


int main()
{
	// str1에만 값이 있고, str2는 초기화 값을 넣지 않음.
	char str1[20] = "1234567890";
	char str2[20];

	// str1을 str2에 복사 * 안전한 사용법 strncpy
	strncpy(str2, str1, sizeof(str2));

	// 출력확인
	puts(str1);
	puts(str2);

	return 0;
}

결과는 같다.

 

반응형

 

 

아래 코드는 유도리 있게 딱 할당된 메모리 만큼만 복사하고 마지막에 NULL을 넣어 문자열을 끝낸다.

#define _CRT_SECURE_NO_WARNINGS // fopen 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>


int main()
{
	// str1에만 값이 있고, str2는 초기화 값을 넣지 않음.
	char str1[20] = "1234567890";
	char str3[5];

	// str1을 str3에 복사 * 안전한 사용법 strncpy
	strncpy(str3, str1, sizeof(str3) - 1);	//	맨 마지막자리만 빼고 복사를 하라! (Null이 들어갈 공간 마련하기 위해)
	str3[sizeof(str3) - 1] = 0;				//	str[5-1] = str[4], 즉, 문자열의 마지막 자리에 0을 대입. 문자열을 끝냄.


	// 출력확인
	puts(str1);
	puts(str3);

	return 0;
}

(결과)

 

 

반응형
반응형

특정 문자열의 길이 정보를 반환한다.

 

함수형태: unsigned int strlen(const char * s)
용도 : s의 string 의 길이를 반환함.


ex) strlen(str) 아래 의 경우, NULL 문자를 제외한 7을 반환함.

#include <stdio.h>
#include <string.h>

// NULL을 제외한 수를 출력
void RemoveBSN(char str[])
{
	int len = strlen(str);								//	len에는 'Enter키'포함, NULL문자 빼고, 7이 저장됨. [123456'\n']
	str[len - 1] = 0;									//	str[7-1] = str[6] 자리에 0을 대입. 즉, 'Enter키' 자리에 0을 대입하여 
}														//	문자열을 6에서 끝냄.

int main()
{
	char str[100];
	printf("문자열 입력: ");
	fgets(str, sizeof(str), stdin);						//	키보드로 부터 입력 받음 ,123456 를 입력하면
	printf("길이: %d, 내용: %s \n", strlen(str), str);

	RemoveBSN(str);										//	위에 함수 작동.

	printf("길이: %d, 내용: %s \n", strlen(str), str);	//	함수 작동 전과 후 비교해보기.
	return 0;
}
반응형

(결과)

결과를 보면 NULL을 포함하여 입력한 갯수가 나오지만, 위 함수를 이용하면 NULL은 제외한 갯수를 보여준다.

 

 

반응형
반응형

.com  .co.kr  등등 도메인을 구하기 위해서는 구매를 해야하는데, 아래 사이트에서는 무료로 도메인을 제공한다.

먼저 무료로 도메인 주소를 구하기 위해서는 아래 참고.

https://ansan-survivor.tistory.com/1315

 

무료로 도메인 발급하여 내 사이트에 적용하기 (Freenom 사용방법), Freenom Not Available 문제 해결방법

보통 ~~.com  ~~.co.kr 같은 도메인을 발급하기 위해서는 해당 도메인을 구매해서 본인이 사용하고 있는 호스팅서버에 IP와 맵핑을 시켜 사용해야 한다. 그 방법으로는 아래 참고. https://ansan-survivor.t

ansan-survivor.tistory.com

 

도메인 주소를 갖고 있다고 가정하고, AWS Lightsaild에 해당 도메인과 IP주소를 맵핑시켜본다.

그리고 이미 인스턴스를 하나 갖고있다고 가정한다.

 

1. Lightsail 콘솔 접속 후 로그인

https://lightsail.aws.amazon.com/ls/webapp/home/instances

 

https://lightsail.aws.amazon.com/ls/webapp/home/instances

 

lightsail.aws.amazon.com

 

2. Networking - Create DNS zone

 

3. 도메인명을 넣어 네임서버 주소를 얻는다.

    Create DNS zone 클릭

    내 도메인주소 확인, 그리고 아래 네임서버 주소를 확인한다.

네임서버 4개를 이제 도메인사이트가서 등록할 것이므로 복사해둔다.

반응형

4. 내 Public주소 확인하여 record 생성.

내 IP확인 후 복사
Add record로 생성
A record, www입력, 그리고 복사한 IP주소를 넣는다. 마지막에 V를 눌러서 저장

 

 

5. 구메한 도메인 홈페이지 Freenom에 가서 아마존 네임서버를 등록한다.

 

위에서 복사한 아마존 네임서버를 붙여넣기 한다.

 

 

** 바로 적용되지 않는다. 몇시간 길면 하루정도 지나야 적용된다.

반응형
반응형

https://www.quora.com/When-is-the-circular-buffer-in-C-empty

입력한 버퍼를 비우는 방법에 대해서는 아래 설명했다.

https://ansan-survivor.tistory.com/1322

 

[C언어] 문자열 입력 버퍼(buffer) 비우기 함수

아래 코드는 fgets함수로 키보드로 부터 입력이 들어올 때, 모든 버퍼를 싹 비워버리는 함수다. #include void ClearLineFromReadBuffer(void); int main() { // ex) 880808'\0' 총 7개 배열 필요. char perID[7];..

ansan-survivor.tistory.com

 

출력버퍼를 비워주는 내장된 함수가 있는데 이름은 fflush( ) 이다.

반응형


※ fflush 함수는 Write에서만 가능(쓰기 모드).  즉, 출력버퍼를 비울때 사용가능하다.
    int fflush(FILE * stream);

 

    각 입출력에서 "버퍼를 비운다"의 실제 의미
* 출력버퍼를 비운다:  출력버퍼를 비운다는 말은 현재까지 저장된 모든 데이터를 '목적지(모니터, 파일)로 전송한다'
* 입력버퍼를 비운다:  입력버퍼 데이터를 소멸시킴(입력된 것을 삭제), 그러나 fflush() 함수에서는 호출할 수 없다!  -> ( getchar() 로 읽고 활용하지 않고 소멸 )

 

OS의 종류에 따라 어떤 OS는 프로그램이 전부 끝난 후에 출력이 이루어 질 수 있고, 어떤 OS는 버퍼가 비워질때 출력이 이루어지는 경우가 있다.

그래서 특정경우 출력이 반드시 필요할 때는 해당 버퍼를 비워주어야 어떤 OS든간에 출력이 가능하다.

#include <stdio.h>

// fflush는 출력버퍼를 비우는 함수 !

int main()
{
	FILE * fp = fopen("data.txt", "wt");

	fflush(fp);			//	이렇게 fclose() 함수를 호출하지 않고, 중간에 fflush()함수를 이용해서 버퍼를 비울수도 있다.

	// 하지만, 버퍼를 비운다 해도 fopen이 열리면 반드시 fclose를 하는 습관을 갖자.
	fclose(fp);

	return 0;
}

 

* 주의 visual studio에서는 입력버퍼 비울때 fflush 함수를 허용하나, 이것은 표준이 아니므로 가급적이면 사용하지 않는 것이 좋다. (해당코드가 다른 OS에서 안돌 수 있다) 즉, fflush(stdin) 이런건 사용하지 않기.

 

 

 

반응형
반응형

러시아가 최근 우크라이나를 침공했다.

무자비한 푸틴의 아무도 예상치 못한 전면전이다...

 

예전 여행하면서 만났던 우크라이나 친구가 있는데, 그가 걱정이 되서 오랜만에 연락을 해보았다. 다행이도 친구는 미국 디트로이트에 있어서 참변을 면했지만, 친구의 가족들이 모두 키예프에 산다고 한다.

 

부모님부터 조부모님까지 모두 키예프 또는 그 인접한 도시에 사는데 주변에 몇개의 포탄이 떨어졌다고 한다.

우리는 뉴스와 유투브로 접하고, 각종 가짜 뉴스들, 러시아의 왜곡 선전에 정확한 실시간 정보를 얻기 힘들다.

 

친구는 미국에서 우크라이나를 돕기위한 활동을 하고 있고, 많은 현지 실시간 정보를 공유하고 있다고 한다.

아직 인터넷과 통신망은 연결된 상태라고 한다.

오늘 (2/26) 키예프에 대한 총공세가 있을 것으로 예상하는데, 많이 걱정이 돤다고 한다.

 

우크라이나 사람들의 실제 현장에서 전장정보를 사진이나 동영상을 트위터로 공유하고 있다.

우크라이나 현지 친구에게 전달받은 현지 우크라이나 사람들의 실시간 트윗정보에 대해 알려주었다.

반응형

(키예프에 대한 공식적인 상황 전달)

https://twitter.com/KyivIndependent

 

The Kyiv Independent(@KyivIndependent) 님 | 트위터

@KyivIndependent 님 언뮤트하기 @KyivIndependent 님 뮤트하기 팔로우 @KyivIndependent 님 팔로우하기 팔로잉 @KyivIndependent 님 팔로우 중 언팔로우 @KyivIndependent 님 언팔로우하기 차단됨 @KyivIndependent 님이 차단

twitter.com

 

(우크라이나의 최신 정보를 공유)

https://twitter.com/mil_in_ua

 

Мілітарний(@mil_in_ua) 님 | 트위터

@mil_in_ua 님 언뮤트하기 @mil_in_ua 님 뮤트하기 팔로우 @mil_in_ua 님 팔로우하기 팔로잉 @mil_in_ua 님 팔로우 중 언팔로우 @mil_in_ua 님 언팔로우하기 차단됨 @mil_in_ua 님이 차단됨 차단 해제 @mil_in_ua님 차

twitter.com

(실제 전투 현장에 대한 우크라이나 현지 사진을 전달)

https://twitter.com/taraschmut

 

Т(@TarasChmut) 님 | 트위터

@TarasChmut 님 언뮤트하기 @TarasChmut 님 뮤트하기 팔로우 @TarasChmut 님 팔로우하기 팔로잉 @TarasChmut 님 팔로우 중 언팔로우 @TarasChmut 님 언팔로우하기 차단됨 @TarasChmut 님이 차단됨 차단 해제 @TarasChmut

twitter.com

지하철로 대피한 우크라이나 시민들

 

(우크라이나 현지 상황 전달)

https://twitter.com/IAPonomarenko

 

Illia Ponomarenko(@IAPonomarenko) 님 | 트위터

@IAPonomarenko 님 언뮤트하기 @IAPonomarenko 님 뮤트하기 팔로우 @IAPonomarenko 님 팔로우하기 팔로잉 @IAPonomarenko 님 팔로우 중 언팔로우 @IAPonomarenko 님 언팔로우하기 차단됨 @IAPonomarenko 님이 차단됨 차단

twitter.com

도로 한복판에 박힌 미사일

 

https://twitter.com/NeilPHauer

 

Neil Hauer(@NeilPHauer) 님 | 트위터

@NeilPHauer 님 언뮤트하기 @NeilPHauer 님 뮤트하기 팔로우 @NeilPHauer 님 팔로우하기 팔로잉 @NeilPHauer 님 팔로우 중 언팔로우 @NeilPHauer 님 언팔로우하기 차단됨 @NeilPHauer 님이 차단됨 차단 해제 @NeilPHauer

twitter.com

이렇게 실시간 군인들 행진까지 현장에서 사람들이 찍는 정보를 실시간으로 볼 수 있다.

군인들 시내 행진
도로주행 도중 폭탄세례가 쏟아지는 장면

우크라이나 친구는 널리 이 정보를 많은 사람들에게 알리고, 러시아가 뿌리는 가짜뉴스 가짜홍보에 속지 않았으면 좋겠다고 전달했다.

 

 

반응형
반응형

 

아래 코드는 fgets함수로 키보드로 부터 입력이 들어올 때, 모든 버퍼를 싹 비워버리는 함수다.

#include <stdio.h>

void ClearLineFromReadBuffer(void);

int main()
{
	//	ex) 880808'\0' 총 7개 배열 필요.
	char perID[7];							
	char name[10];

	fputs("주민번호 앞 6자리: ", stdout);  //  모니터에 출력
	fgets(perID, sizeof(perID), stdin);   //  최대 크기 7 byte를 키보드로 부터 입력 받음.

	/************/
	ClearLineFromReadBuffer();            //  입력 버퍼를 비우기. 그냥 읽어들임. 반환없이.
	/************/

	fputs("이름 입력: ", stdout);          //  모니터에 출력
	fgets(name, sizeof(name), stdin);      //  최대 크기 10 byte를 키보드로 부터 입력 받음.

	printf("주민번호: %s \n", perID);
	printf("이름: %s \n", name);

	return 0;
}

void ClearLineFromReadBuffer(void)
{
	while (getchar() != '\n');        //  문자열의 끝 '엔터키'가 들어올때까지 계속 Read가 되어짐. 즉, 버퍼의 값을 사용하지 않고 그냥 버려짐.
}
반응형

(실행)

 

* 출력 버퍼를 비우는 함수 fflush 는 아래 참고.

https://ansan-survivor.tistory.com/1324

 

[C언어] 문자열 출력 버퍼(buffer) 비우는 함수 fflush() 함수

입력한 버퍼를 비우는 방법에 대해서는 아래 설명했다. https://ansan-survivor.tistory.com/1322 [C언어] 문자열 입력 버퍼(buffer) 비우기 함수 아래 코드는 fgets함수로 키보드로 부터 입력이 들어올 때, 모든

ansan-survivor.tistory.com

 

반응형
1···22232425262728···181

+ Recent posts