2010年6月28日月曜日

文字列をクローンする

Check
C/C++でのお話。std::string使えって話ですけど、文字列リテラルをクローン(メモリを動的確保して内容をコピーする)するコードを書いてみた。当然、使用後は明示的にdeleteする必要があります。

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

void CloneStr(char **dest, const char *src)
{
   size_t len = strlen(src);
   *dest = new char [len + 1];

   char *tDest = *dest;
   while(*src)
   {
      *tDest = *src;
      ++tDest;
      ++src;
   }
   *tDest = '\0'
}

int main(int argc, char *argv[])
{
   const char *src = "hoge";
   char *dest = NULL;

   CloneStr(&dest, src);
   printf("%s\n", dest);

   delete[] dest;
   dest = NULL;

   return 0;
}
ちまちまこういうコードを書いていこうと思う。文字列コピーの部分はstrcpyでもいいと思うけど、最近OSS読みにハマってるのであえて書いてみた。

※ 追記
strdupという関数があるそうです。知らんかった。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
   const char *src = "hoge";

   // 文字列をクローン
   char *dest = strdup(src);

   //出力
   printf("%s\n", dest);

   //メモリ解放
   free(dest);
   dest = NULL;

   return 0;
}

0 件のコメント:

コメントを投稿