2012-03-09 17 views
1
#include<stdio.h> 
int main() 
{ 
    int i,n=0; 
char str[]="karthik"; 
while(*(str+n)!='0') 
n++; 
for(i=0;i<n/2;i++) 
{char temp=str[i]; 
str[i]=str[n-i-1];str[n-i-1]=temp; 
} 
printf("%s",str); 
} 

私はこれはよくある質問ですが、私は何の問題もありませんでした。私はstrlen()を使ったときにうまく働いていたので、以下の2行に何らかのエラーがあることを知っています。C言語のこのプログラム(文字列の反転)は動作しません。

while(*(str+n)!='0') 
n++; 

ので、このように使用することが間違っている理由を言ってください。私はアイデアは、文字列の全体の長さの配列を反復処理することで、Cの==のchar配列'\0'

答えて

3
while(*(str+n)!='0') 
n++; 

のC

+0

私は\ 0を意図したものではなく、それはあなたの –

+0

@karthikgorijavolu感謝逃した:問題ありませんが。答えに小さなメモを追加しました。 –

1

エンドの初心者です忘れないでください。
\0を確認する必要があります。 (\0)C文字列がnullで終了してしまうので

while(*(str+n)!='\0') 
       ^^ 

また、側に問題とは無関係の、あなたのmain()関数から値を返す必要があります注意してくださいが、それは良い習慣です。

0

whileループでNULLをチェックします。ヌル終了の問題に加えて

while(*(str+n)!='\0') 
+4

NULLは '\ 0'と同じではありません! NULLは(void *)0と定義されることが多く、このコードからコンパイラの警告が出る可能性があります。ポインタアドレスとの比較にのみNULLを使うべきです。 – Lundin

+1

説明をありがとう。私は私の答えを訂正しました。 – Abhineet

1

while(*(str+n)!='0') 

から 変更し、あなたは、従来のコーディングスタイルを採用しなければなりません。一つの例:

#include <stdio.h> 

int main() 
{ 
    int i; 
    int n=0; 
    char str[]="karthik"; 

    while(str[n] != '\0') 
    { 
    n++; 
    } 

    for(i=0; i<n/2; i++) 
    { 
    char temp=str[i]; 
    str[i]=str[n-i-1]; 
    str[n-i-1]=temp; 
    } 

    printf("%s",str); 

    return 0; 
} 
+0

私は1回以上投票することができればいいと思う:D –

関連する問題