開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 コンソール アプリケーション
プロジェクト名 StringBuiler
アプリケーションの種類 コンソール アプリケーション
追加のオプション 空のプロジェクト

clrtest.cpp
using namespace System;
using namespace System::Text;
 
int main()
{
	StringBuilder^ sb = gcnew StringBuilder;
	sb->Append("tako\n");
	sb->Append("ika\n");
	String^ s = sb->ToString();
	Console::Write(s);
	Console::ReadLine();
	return 0;
}
 

StringBuiler.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct {
	char *str;
	int len;
	int extent;
} StringBuilder;
 
//==============================================================================
void SBInit(StringBuilder *sb)
{
	sb->len = 0;
	sb->extent = 16;
	sb->str = (char *)malloc(sb->extent);
	sb->str[0] = '\0';
}
 
void SBTerm(StringBuilder *sb)
{
	free(sb->str);
}
 
void SBAppend(StringBuilder *sb, const char *str)
{
	int newLen;
	int newExtent;
 
	newLen = sb->len + strlen(str);
	newExtent = sb->extent;
	while (newExtent <= newLen) {
		newExtent <<= 1;
	}
	if (sb->extent < newExtent) {
		sb->extent = newExtent;
		sb->str = (char *)realloc(sb->str, sb->extent);
		fprintf(stderr, "newExtent=[%d]\n", newExtent);
	}
	strcpy(sb->str + sb->len, str);
	sb->len = newLen;
}
 
//==============================================================================
int main(int argc, char *argv[], char *envp[])
{
	StringBuilder sb;
 
	SBInit(&sb);
	while (*envp) {
		SBAppend(&sb, *envp);
		SBAppend(&sb, "\n");
		envp++;
	}
	printf("%s", sb.str);
	SBTerm(&sb);
	return 0;
}
 
最終更新:2012年10月01日 07:45