2016-03-28 15 views
0

私は最初の行に "hello"という単語を含むファイルから1行を読みます。そして私は、しかし、文字列は、(場合を除く)同じでない場合strcasecmpをC言語で正しく使うには

char *line = NULL; 
size_t len = 100; 
printf("%s", argv[1]); 
FILE * fp = fopen(argv[1], "r"); 
if (fp == NULL) { 
    printf("empty\n"); 
    exit(0); 
} 
getline(&line, &len, fp); 
if (strcasecmp(line, "hello") == 0) { 
    printf("same"); 
} 
+0

ので、比較以上の長さを制限するのいずれか、のようなものを使用して、新しい行の文字をトリミング。 – BLUEPIXY

+0

** strncasecmp(line、 "hello"、5); **接頭辞はより長い単語の前に字句的にある方が良いかもしれません。 hello

+0

@ ArifBurhanはstrncasecmpを使って実際に動作しました!ありがとう! – jobravooo

答えて

1

strcasecmpのみ0を返します、まだ異なっている私に言っている、strcasecmpを使用して「ハロー」と比較しています最初の文字列の2番目の文字列で始まる場合。

getlineは行の最後に改行文字を読み込みます。したがって、 "hello"と入力すると、 "line"に入る文字列は "hello \ n"になります。

0

これはgetline()

getline() 
reads an entire line from stream, storing the address of the 
buffer containing the text into *lineptr. 
The buffer is null-terminated 
and includes the newline character, if one was found. 

お知らせのmanページから改行文字を含めて約その部分です。改行を削除する必要はあり

char * newline = NULL; 
if(NULL != (newline = strchr(line, '\n')) 
{ // then newline found 
    *newline = '\0'; 
} 
関連する問題