• ベストアンサー

strcatの逆をしたい

連結関数のstrcatの逆ってどうやったらできるのでしょう? 出来るだけシンプルな方法教えてください。 (文字列5→初めの文字列3と後ろの文字列2に分ける)

質問者が選んだベストアンサー

  • ベストアンサー
  • petertalk
  • ベストアンサー率69% (156/225)
回答No.3

char *strcat(char *s1, const char *s2) は、 s1 の後に s2 を結合する関数ですよね。 逆ということは、s1 から s2 を分離することでいいですか? 文字列5→初めの文字列3と後ろの文字列2に分けるのなら strcpy(s2,s1+3); *(s1+3)='\0'; 文字列の分離位置を変数にしたいのなら、 切り離す最初の文字列長をlenとすれば strcpy(s2,s1+len); *(s1+len)='\0'; です。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • walktkd
  • ベストアンサー率22% (103/461)
回答No.2

strcatは先頭ポインタと終末のNullのみを意識し、lengthを意識しないものですので、やりたい事が「文字5文字を最初の3文字と後ろ2文字に分ける」でしたら、strcatの逆と考える事は出来ません。 memcpy等lengthを意識する関数値で3文字コピー、ポインタ3つずらして2文字コピーになると思います。

すると、全ての回答が全文表示されます。
回答No.1

char str[] = "ABCab"; char front[4], rear[3]; strncpy(front, str, 3); front[3] = '\0'; strcpy(rear, str + 3); printf("[%s][%s]\n", front, rear);

すると、全ての回答が全文表示されます。

関連するQ&A