2017-02-02 26 views
0
char * line = NULL; 
size_t len = 0; 
FILE *fp = fopen("test.rpn", "r"); 
while ((read = getline(&line, &len, fp)) != -1) { 
    if(&line[0] == "#"){ 
      exit(0); 
    } 
} 

これは機能しません。行の最初の文字は#ですが、まだ終了していません。私は0/1/2/3/4でも奇妙な行の問題だったかどうか試しましたが、そうではありません。Cの文字列と文字列を比較する

答えて

1
if(&line[0] == "#"){ 

&)のアドレスを取得する必要はありません、あなたが文字列の最初の文字を比較したいとlineはすでに文字列である

if(line[0] == '#'){ 

する必要があり、また、単一引用符を使用二重引用符ではなく

+1

' '#' が' 'おそらく意図はなく、' "#" です。 – DeiDei

+0

私はそれを試みましたが、どちらもうまくいかず、 "main.c:63:30:警告:ポインタと整数の比較"というメッセージが表示されます –

+0

"デジデイ、 。 –

4

代わりにあなたがアドレスを取得すると確実に比較は関係なく、あなたがアドレスを比較していて、彼らは異なるものになることを確信できるので、文字がline[0]であるものの偽であるこの

if (line[0] == '#') // Note the single quotes 

を行います。代わりに値を比較する必要があります。

また、警告が表示されたときには、通常何かが間違っていることを意味します。警告が表示されても何も間違っていない場合は、必ずそのような警告を期待していました。警告が予期しない場合、あなたは何か悪いことをしました。


&line[0]ので、あなたはすべての確実同じではありませんリテラル"#"文字列のアドレスへのポインタであるlineのアドレスを比較しているlineと同じです。

+0

私はそれを試みましたが、どちらもうまくいかず、 "main.c:63:30:warning:ポインタと整数の比較"というメッセージが表示されます。 –

+0

@asdqq一重引用符で ''# ''コンパイルの警告。あなたはどちらか。1.それを試していない!あなたの入力には最初の文字として '# 'はありません。 –

+0

ああ、ありがとう、それを使用して "#"の代わりに#を使用して私の問題を解決しました。問題は '&'で、私はあなたもそれを変えたことに気付かなかった、私の悪い! –

1

&lineはラインのアドレスを意味し、あなたは彼の価値をしたいので、使用します。

line[0] == '#'