2017-11-04 6 views
-2
  1. 文字列の長さのコードを記述しました。
  2. これは、 出力で何らかの問題が発生したため、正常にコンパイルされました。
  3. 文字列を入力した後に出力が停止する。
  4. 私はポインタあなたのコードで
#include<stdio.h> 
int leng(char*); 
void main() 
{ 
    char str[20]; 
    scanf("%s",str); 
    printf("%s",str); 
    int l; 
    l=leng(str); 
    printf("%d",l); 
} 

int leng(char*p) 
{ 
    int l=0; 
    while(*p!='\0') 
    { 
     l++; 
    } 
    return l; 
} 
+0

'leng()'のループは '* p'の値をテストしますが、' p'や '* p'は変更しません。したがって、無限ループです。 – Peter

+0

..あなたがデバッガを使用していれば明らかになったことでしょう、毎回いくつかの重要なバールを出力しただけです:(デバッガを使用できるようになるまで、コードは書き換えないでください。 –

答えて

2

を使って長さを見つける必要があり、問題はここで

ここではインクリメントしません*pポインタ

while(*p!='\0') 
です。そう、ループは無限に動作し、プログラムがクラッシュする可能性があります。あなたはscanf関数の内部で '&' を使用していないエラー -

ので、

while(*p++!='\0') 

代わり

while(*p!='\0') 
+0

p + = sizeof char)は、charがバイトサイズのアーキテクチャでのみ動作しますので –

+1

ohhです。このような愚かな間違いでした。ありがとうalot rsp助けてください。 –

+0

@CaioSym:sizeof(char)は定義によると常に1なので、そうではありませんまた、++演算子はサイズを考慮しているので、サイズに関係なくすべてのデータ型に対応します –

0
#include<stdio.h> 
int leng(char*); 
int main() 
{ 
    char str[20]; 
    scanf("%s",str); 
    printf("%s", "Length of input string is "); 
    int l; 
    l=leng(str); 
    printf("%d",l); 
    } 

int leng(char*p) 
{ 
int l=0; 
while(*p!='\0') 
{ 
    l++; 
    p = p +1; 
} 
return l; 
} 
+0

ありがとうございます。usman –

-1

第一の使用。 2番目のエラー - l ++の後にwhileループの中にp ++を入れる必要があります。

+0

大丈夫です。 &文字列を読み込むときにscanf関数で使用されません。 – rsp

+1

この場合、 '&'は間違っています。 –

+0

それは&なしで働いています。しかし、なぜそれは整数のような文字列では必要ないのですか? – Shashwat