• 締切済み

末尾にコピーするプログラム

大学で 「main関数でキーボードからの2つの文字数を受け取り、関数を実装し仮引数に文字列s1、文字列s2をとり、s2をs1末尾にコピー(s1とs2を連結)するプログラミングを作成しなさい」 void cat(char *s1,char *s2) という問題がありました。以下、その回答を考えたのですがこれで大丈夫ですか? #include <stdio.h> void cat(char *s1, char *s2); void main(void); void cat(char *s1, char *s2) { while ((*s1++ = *s2++) != '\0') ; } void main(void) { char s1[100]; char s2[100]; printf("一つ目の文字列を入力してください。:",s1); scanf("%s",s1); printf("二つ目の文字列を入力してください。:",s2); scanf("%s",s2); cat(s1, s2); printf("コピー後: = %s\n", s2); }

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.2

動かしてみましたが、求める答えは得られません。 どこが間違っているかチェックしてみてください。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「main関数でキーボードからの2つの文字数を受け取り、関数を実装し仮引数に文字列s1、文字列s2をとり、s2をs1末尾にコピー(s1とs2を連結)するプログラミングを作成しなさい」 と void cat(char *s1,char *s2) の関係がさっぱりわからんのだが, それはさておき自分で確かめないのでしょうか?

関連するQ&A

  • 文字列のコピー

    C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。

  • ポインタについて

    #include<stdio.h> int main(void) { char str[10]; char *ptr = str; printf("文字列を入力してください。\n"); scanf("%s",ptr); printf("文字列は%sです。",str); return 0; } 上記のプログラムのscanf("%s",ptr);の ptrに&をつけるとなぜ先頭の4文字は入力しても 表示されなくなってしまうのでしょうか? よろしくお願いします。

  • 文字列を入力・表示

    文字列を入力して表示したいのですができません。誤っていないと思うのですが・・・。何が間違っているのでしょうか? #include<stdio.h> void main (void) { char namae; printf("お名前を登録します。お名前を入力して下さい。\n"); scanf("%s",&namae); printf("お名前は%sですね。\n",namae); }

  • strcat関数のオーバーフロー回避について

    C言語を勉強中の者です。開発環境はWindows7 Visual Studio 2010です。 2つの文字列を入力し、strcat関数を用いて文字列を結合、出力するプログラム を作成しています。文字列は1つの配列につき最大半角5文字です。 本来であれば、char st1[11];ではなく、char st1[6]; としたかったのですが、char st1[6];とすると、strcat関数を実行した際に バッファオーバーフローによるエラーが出てしまいます。 この様な時に、もっと合理的なコードの書き方があれば教えていただけないでしょうか。 よろしくお願いします。 #include <stdio.h> #include <string.h> void main(void) { char st1[11]; char st2[6]; printf("文字列(5文字以内)"); scanf("%s", st1); printf("文字列(5文字以内)"); scanf("%s", st2); strcat(st1, st2); printf("%s", st1); }

  • 関数の作り方

    文字列s1に文字列s2が含まれるか判定する関数search を作りたいのですが、コンパイルできません。 どこに問題がありますか?? #include<stdio.h> #include<string.h> int seach(char *s1,char *s2) { char *p; p = strstr(s1,s2); if(p == NULL){ return 0; }else{ return 1; } } main(void){ char s1[255]; char s2[255]; int res; printf("文字列s1を入力:"); scanf("%s",s1); printf("文字列s2を入力:"); scanf("%s",s2); res = search(s1,s2); if(res == 1){ printf("文字列s1に文字列s2が含まれます\n"); } if(res == 0){ printf("文字列s1に文字列f2は含まれません\n"); } return 0; }

  • 文字のコピー

    文字配列s[256],t[256]を用意して文字列を入力し、配列sに格納し、その後に配列s の内容を配列t にコピーするプログラムというものなんですが・・・・二つの文字型ポインタp,q で定義し,p = s,q = t として,変数p,q のみを利用してコピーします。 #include <stdio.h> int main ( void ){ char s[256]; char t[256]; char *p; char *q; printf("文字列を入力:"); scanf("%s", s ); p = s; q = t; while(*p != '\0'){ p++; q++; *q = *p; } p = '\0'; printf("文字列は%s",t); getchar(); getchar(); return(0); } ビジュアルスタジオつかってます。 しかしこのように記述するとなぜか最初の文字をよみこんでくれません。 たとえば yasuhiroとすると フasuhiroと出力してしまうのですが なにかいい解決方法はありませんか??

  • 文字列の探索

    ファイル名を指定して文字列の探索を行うというプログラムをC言語で作成したのですが、 コンパイルのときに警告で「問題のあるポインタの変換(関数 main )」と出て、うまい具合に動きません。改良点を教えてください。 #include<stdio.h> #include<string.h> #include<stdlib.h> unsigned char *s1; unsigned char *s2; unsigned char *cp; FILE *fp; char fname[64]; void TestStrStr(void); main(){ s1 = calloc(256, sizeof(unsigned char)); s2 = calloc(256, sizeof(unsigned char)); printf("Input Filename..."); scanf("%s",fname); while(1){ fp = fopen(fname, "r"); if(fp == NULL){ printf("ファイルを開くことができません...\n"); printf("Input Filename..."); scanf("%s",fname); }else break; } s1=fp; // printf("文字列1を入力してください:"); // scanf("%s",s1); printf("文字列2を入力してください:"); scanf("%s",s2); TestStrStr(); return 0; } void TestStrStr(void){ cp = strstr(s1, s2); if(cp == NULL) printf("'%s'に'%s'のいずれの文字も含まれない.\n", s1, s2); else printf("'%s'の中に現れる'%s'という文字列は%d文字目にある.\n", s1, s2, cp - s1 + 1); free(s1); free(s2); }

  • c言語のポインタへの文字列入力についてです。

    当方c言語初学者なのですがscanfを使ってポインタに文字列を入力したいのですがバグが発生して進みません・・・どういうことなのでしょうか? #include <stdio.h> int main(void) { char *a; scanf("%s", a); printf("%s", a); return (0); } *aをa[128]; のように配列に変えるとうまくいくことはなんとかわかるのですが・・・助けてください(^_^;)

  • 検索させるプログラムです。

    文字列を入力させて、その後に検索キー入力をし、先ほど入力した文字列のなかから 一致するものを検索するプログラムです。 #include <stdio.h> int searchidx(char a[],char key) { int i=0,j=0; a[3]=key; for(i=0;i<3;i++){ if (a[i] == key){ j++; break; } } if(j==0){ return(-1); }else{ return(i); } } int main(void) { int a,i; char ky=0; char x[3]; printf("3個の文字を入力してください。\n"); for (i = 0; i < 3; i++) { printf("x[%d]:", i); scanf("%s", &x[i]); } printf("検索キー:"); scanf("%s", &ky); a=searchidx(x,ky); if (a == -1){ puts("一致しません。"); }else{ printf("%d\n",a); printf("%s\n",x[a]); } } メイン関数で文字列を入力させ、その配列とキー値をサーチ関数に渡して 一致した時の配列の添え字をaに返してメイン関数で文字列の配列のその添え字x[a]で表示されるのではないか?と思ってそうしてるつもりなのですが 実行してみると最後の一致した結果を表示させるところでエラーがでます。 表示させるところの前のprintfで一致するものの要素数が帰ってくるかどうかのチェックを入れてますが ちゃんと添え字番号は正しく返ってくるのになぜ最後の printf("%s\n",x[a]); ではダメなのでしょうか? それとscanfって%sのときは&いらなかったと思うのですが この場合&を入れないとエラーになってしまいます。

  • scanfの後のfgetsについて

    #include <stdio.h> int main(void) { char name[10]; int no; printf("ナンバーを入力してください: "); scanf("%d",&no); /* 35を入力 */ printf("文字列を入力してください: "); fgets(name,10,stdin); /*入力できない*/ return 0; } この例文だと、fgets関数が改行コードを読み取って、終了してしまい文字列入力が出来ないみたいなんですが、scanfの後にfgetsを使うような(scanfとfgetsの間にscanfの残した?改行コードを取り除く方法)処理はどのような方法があるのでしょうか? 試しにfgets文を2度書いたら思っていた動作をしてくれたのですが、はたしてfgets文を2度書くというような事をしていいものなのでしょうか?見た目もなんだか変な感じですし。。↓ #include <stdio.h> int main(void) { char name[10]; int no; printf("ナンバーを入力してください: "); scanf("%d",&no); /* 35を入力 */ printf("文字列を入力してください: "); fgets(name,10,stdin); fgets(name,10,stdin);  /*入力できる*/ return 0; }