他の人は言っているように、文字列を==
と比較することはできません。コードが機能するようにするには、fgets()
の末尾に\n
文字を追加する必要があります。そうしないと、比較している:あなたは\n
文字を削除しない限り、常に、falseになります
if (strcmp("mother\n", "mother") == 0) {
を。
fgets()
以来戻っNULL
失敗した場合、ユーザからの入力を読み込むとき、このように、ことを確認しても安心です。
if (fgets(string, 20, stdin) == NULL) {
/* Exit program */
}
ます。また、このようなチェックを通り、fgets()
をチェックするいくつかの余分なエラーを追加することができますこのように確認することができ、バッファオーバーフロー、これらの考慮後
slen = strlen(string);
if (slen > 0) {
if (string[slen-1] == '\n') {
string[slen-1] = '\0';
} else {
/* Exit program */
}
}
は、あなたのコードは、おそらく次のようになります
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 20
int
main(int argc, char *argv[]) {
char string[BUFFSIZE];
size_t slen;
const char *compare = "mother";
printf("Enter a string: ");
if (fgets(string, BUFFSIZE, stdin) == NULL) {
printf("Error reading string into buffer.\n");
exit(EXIT_FAILURE);
}
slen = strlen(string);
if (slen > 0) {
if (string[slen-1] == '\n') {
string[slen-1] = '\0';
} else {
printf("Buffer overflow. Exceeded buffer size of %d.\n", BUFFSIZE);
exit(EXIT_FAILURE);
}
}
if (!*string) {
printf("No string entered.\n");
exit(EXIT_FAILURE);
}
printf("My string = %s.\n", string);
if (strcmp(string, compare) == 0) {
printf("They are the same.\n");
} else {
printf("They are not the same.\n");
}
return 0;
}
'fgets'は文字列を比較しません。 'strcmp'では、文字列がどのように生成されるかは関係ありません**。そして、関数のドキュメンテーションはあなたが理解できないのですか? – Olaf
'fgets()'で読んでいるものを見るには 'printf(" <%s> \ n "、string);を試してください。 – chux
'strcmp(string、" mother \ n ")' – BLUEPIXY