見出し画像

(答案提出)C言語教室 第8回 - 文字列を扱う標準ライブラリ

kznさん主催C言語教室、出席番号65535番(後が無い?!)のAkio van der Meerです。(嘘です。実はまだ、入学すら許可されていませんでした。勝手に聴講生をさせていただいています。)

今回も頑張って、答案を提出します。


課題

・最初の引き数で渡した領域に、2番めと3番めの文字列を連結した文字列を返す関数を書きなさい。なお最初の引き数の領域は呼び出し側で確保しておくものとします。
・2つの引き数で渡した文字列を関数内で動的に確保した領域に連結した文字列として返す関数を書きなさい。

なお、標準ライブラリの関数は必要に応じて使ってください。

https://note.com/kazushinakamura/n/nac9aeac6e292


課題8−1. 最初の引き数で渡した領域に、2番めと3番めの文字列を連結した文字列を返す関数

/* main.c */ 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void test81(char* tgt, char* s1, char* s2) {
 
   strcpy(tgt, s1);
   strcat(tgt, s2);

}

void main() {
  char rslt[15];
  char src1[] = "abcdefg";
  char src2[] = "1234567";

  test81(rslt, src1, src2);

  printf("source1 = %s\n", src1); 
  printf("source2 = %s\n", src2);
  printf("result  = %s\n", rslt);
  
}


課題8−1. 実行結果

source1 = abcdefg
source2 = 1234567
result  = abcdefg1234567

どうでしょうか? 
一応は、機能しているようです。
(動作環境;https://9cguide.appspot.com/web_picoc_em.html )

この調子で次にいってみましょう。


課題8−2. 2つの引き数で渡した文字列を関数内で動的に確保した領域に連結した文字列として返す関数

/* main.c */ 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * test82(char* s1, char* s2) {
  char *d;
  int len;

  len = strlen(s1) + strlen(s2);
  d = (char*)malloc(len + 1);

  if (d != NULL){
    strcpy(d, s1);
    strcat(d, s2);
  }
  
  return d;
}

void main() {
  char *rslt;
  char src1[] = "hijklmn";
  char src2[] = "7654321";

  rslt = test82(src1, src2);

  printf("source1 = %s\n", src1); 
  printf("source2 = %s\n", src2);
  printf("result  = %s\n", rslt);

  free(rslt);
}


課題8−2. 実行結果

source1 = hijklmn
source2 = 7654321
result  = hijklmn7654321

どうでしょうか? 
こちらも一応は、機能しているようです。
(動作環境;https://9cguide.appspot.com/web_picoc_em.html )


独り言

標準ライブラリってプラットフォーム毎に仕様を確認すべきといった記述を見たのですが、それってどうやって確認すべきなのでしょう?
例えば、私が使わせていただいている「ブラウザで動く C言語実行環境」の標準ライブラリの仕様とかを、本来は知っておかねばならないということですよね?実際、業務でC言語開発される諸兄姉は、どのようにされておられるのかな?と思った次第です。

ああ、プログラミングって楽しい!答え合わせが待ち遠しい。


ところで、

このC言語教室、冬休みがあったらいいのになぁ
これからしばらくの間、タイムリーに答案提出するのがちょっと厳しいので、課題をいくつか宿題として出していただいて、冬休み明けに答え合わせしていただけるといいのになぁ、、、

えっ? 

あくまで、独り言です!

気にしないでください、、、

、、、独り言ですので、、、(笑


ここまで読んでいただき、有難うございました。



これまでの収益は全て、それを必要としておられる方々へ、支援機関を通して寄付させていただきました。この活動は今後も継続したいと思っています。引き続きよろしくお願いいたします。