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

void separate(int charNum, const char *input, char *mess1, char *mess2);

int main(void)
{
	char message[100] = "01234567891011121314";
	char mess1[100];
	char mess2[100];

	separate(7, message, mess1, mess2);
	printf("mess1=%s, mess2=%s\n", mess1, mess2);

	separate(20, message, mess1, mess2);
	printf("mess1=%s, mess2=%s\n", mess1, mess2);

	separate(30, message, mess1, mess2);
	printf("mess1=%s, mess2=%s\n", mess1, mess2);

	getchar();

	return 0;
}

// 全角文字の間を分割したら文字化けするのでしないように全角文字も1文字と見なします
void separate(int charNum, const char *input, char *mess1, char *mess2)
{
	int charCount = 0;
	int byteNum = 0;
	unsigned char *check_doublebyte = (unsigned char *)input;

	while (charCount < charNum){
        // 全角第1バイトかどうか判定(SHIFT-JIS)
		if ((check_doublebyte[byteNum] >= 0x81 && check_doublebyte[byteNum] <= 0x9e) ||
			(check_doublebyte[byteNum] >= 0xe0 && check_doublebyte[byteNum] <= 0xef)){

			if (input[byteNum + 1] == '\0'){
				byteNum++;
				break;
			}
			else{
				byteNum += 2;
			}
		}
		else{
			byteNum++;
		}

		if (input[byteNum] == '\0'){
			byteNum--;
		}

		charCount++;
	}

	strcpy(mess1, input);
	strcpy(mess2, input);

	mess1[byteNum + 1] = '\0';
	mess2[0] = mess2[byteNum + 1];
}
