質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

5回答

8792閲覧

strcpを使わずに文字列をコピーしたい

h_proc

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/02/10 13:33

文字列をコピーする関数をstrcpを使わずに作りたいです。詳細は以下のようです。関数の仮引数部分の配列にはWelcom to Japanのように単語をいくつか入力し、一つ目の単語だけをコピーしたいです。そして、コピーした単語の文字数を()の中に表示させたいです。以下のコードを書いたのですが、単語数には(0)と表示され、文字列のコピーもうまくできていませんでした。どこが間違っているか教えていただきたいです。よろしくお願いいたします。

#include <stdio.h> #define COUNT 100 int word_copy(char a[], char b[]); int word_copy(char a[], char b[]) { int size = 0; for (int i = 0; a[i] == ' '; i++) { b[i] = a[i]; size += 1; } printf("%s (%d)",b,size); return i; } int main(void) { char ans[COUNT]; char b[COUNT]; printf("Please inout some letters.\n"); scanf("%s", ans); word_copy(ans, b); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

for (int i = 0; a[i] == ' '; i++) {

この条件は正しいのかよく考えよう。。

投稿2019/02/10 13:36

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2019/02/10 14:14

文字列にいくつか単語を入力させて、一つ目の単語だけ(一つ目の空白まで)コピーしたいのですが、、、
y_waiwai

2019/02/10 14:22 編集

for文の条件式は、偽でループを終了するので、提示の条件では逆ですね また、文字列の終わりでもループを終了させる必要がありますので、その条件とandする必要がありますねー ちなみに、標準関数の文字列コピーstrcpy関数ですが、 「strcpy ソース」でぐぐると、いろんな実装のソースコードの解説が出てきますんで、一通り読んで勉強してみましょう
h_proc

2019/02/12 04:14

ありがとうございます。逆の条件にして実行したところ、ans corrapsedというエラーが表示されてしまいました。要素数の設定が間違っているのでしょうか。 #include <stdio.h> #define COUNT 100 int word_copy(char a[], char b[]); int word_copy(char a[], char b[]) { int size = 0; for (int i = 0; a[i] != ' '; i++) { b[i] = a[i]; size += 1; } printf("%s (%d)",b,size); return size; } int main(void) { char ans[COUNT]; char b[COUNT]; printf("Please input some letters.\n"); scanf("%s", ans); word_copy(ans, b); return 0; }
guest

0

forの2つ目の式は、ループ継続条件なので、a[i]' 'に等しい間ループを続けて、等しくなくなったときにループが終了します。

投稿2019/02/10 13:56

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2019/02/12 04:15

条件が逆になっていました。ありがとうございます。
guest

0

word_copyで文字列のインデックスやサイズにintを使っていますが、size_t型にした方がより安心です。

投稿2019/02/11 04:39

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下の様に一行毎に printf を入れまして, 想定した流れ・変数の値および更新をしているか確認することが基本であり大切かと思います.

C

1printf("1 a='%s'\n",a); 2for (int i = 0; a[i] == ' '; i++) { 3 printf("2 a[%d]='%c'\n",i,a[i]); 4 b[i] = a[i]; 5 printf("3 b[%d]='%c'\n",i,b[i]); 6 size += 1; 7 printf("4 size=%d\n", size); 8} 9printf("5\n");

投稿2019/02/10 14:38

jimbe

総合スコア12545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

scanf("%s", ans);では、最初の空白までしか読み込みません。fgets()を使いましょう。

投稿2019/02/10 13:59

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問