アプリ版:「スタンプのみでお礼する」機能のリリースについて

c言語の問題を教えてください。キーボードから文字列を入力し、その長さを表示するプログラムを作成せよ(strlen関数は使ってはいけない)というものです。自分は下記のように書いたのですがこれを実行すると入力する間もなく"文字列の長さは0"と表示されてしまします。どこをどう直せばいいのか教えていただきたいです。
#include<stdio.h>

int main(void){

char string[100];
int i ;


for(i=0;string[i]!='\0';i++){
scanf("%c",&string[i]);

}
printf("文字列の長さは%d\n",i);

return 0;
}

A 回答 (6件)

そもそも「文字列」ってなに?



あと strchr を使えば strlen を代替できるんだけど, それでいいのかなぁ.
    • good
    • 0

#include <stdio.h>


#include <stdlib.h>

int main(void) {
 char string[100];
 int i;

 scanf("%99[^\n]%*[^\n]", string);
 getchar();

 for (i = 0; string[i] != '\0'; i++) {}

 printf("文字列の長さは%d\n", i);
 return EXIT_SUCCESS;
}

/* ここまで */

貴方の書いたコードは着眼点は面白いんだけど、基本的にscanfの機能を勘違いしてますね。

char string[100];

で宣言されたstringはchar型の配列です。まぁ、確かに文字列なんですが。
文字数100が上限なんであって、文字列が100個あるわけではないです。文字列は1つ。
従って、

for(i=0;string[i]!='\0';i++){
 scanf("%c",&string[i]);
}

の書き方は意図する事は分かるんだけどヘン。
特に脱出条件の

> string[i] != '\0';

は無意味でしょ。ヌル文字はscanfによってstring[i]に取り込まれるので、その時点でiが1進み、string[i]が'\0'かどうかなんて永久に分からなくなる。
(あるいは、charの配列の要素の初期値が'\0'で埋め尽くされていたら、その時点でfor文から脱出しちゃうんで、結果scanfは「何も出来なく」なってしまいます)

基本的には

scanf("%s", string);

とすべきですね。繰り返しは必要ない。また、安全性を考慮するなら提示コードのように性器表現、もとい正規表現を絡める必要があります。
    • good
    • 0

なんで100?どこにも書いてないよ?

    • good
    • 0

ごめんなさいアプリの不具合か重複投稿になってしまいました。



ダミーを使わない方法としては、例えばscanf("%s", string);で一気に文字列を受け取ってからfor文でstringの文字数確認をする方法が考えられます。
    • good
    • 0

初期化時にstring[0]にヌル文字が入ってしまっているためでしょう。

ダミーで別な値を入れておいた場合どうでしょうか?
for文突入前に
string[0] = 'a';
    • good
    • 0

初期化時にstring[0]にヌル文字が入ってしまっているためでしょう。

ダミーで別な値を入れておいた場合どうでしょうか?
for文突入前に
string[0] = 'a';
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A