와 문자열을 비교할 때 긍정적 인 반환 I C에 다음 코드를 가지고 :C의 STRCMP()는 문자 포인터
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *buf;
buf = malloc(sizeof(char) * 512);
while(strcmp(buf, "Exit!") != 0)
{
printf("Enter something:");
fgets(buf, sizeof(char) * 512, stdin);
printf("You entered %s\n", buf);
printf("%d\n", strcmp(buf, "Exit!"));
}
}
내가 원하는 동작은 사용자가 지정한 string
을 입력하면 종료 할 while
루프입니다. 내가 이해 한대로 char
포인터를 사용하여 string
을 C로 나타낼 수 있습니다. fgets()
을 사용하여 사용자 입력을 저장하고 strcmp()
함수를 사용하여 비교합니다. 이 비교 결과를 출력하는 디버그 문을 추가하고 "종료"를 입력하면 양의 정수를 반환합니다. while 루프를 종료해야합니다.
내가 누락 된 내용을 설명 할 수 있습니까? 나는 그것이 새로운 라인 문자 또는 C-String 터미네이터와 관련이 있다고 믿는다. \0
. 사용자가 "Exit"를 입력 할 때 while 루프를 종료하려면 어떻게해야합니까?
'fgets' *이와 *가 읽고 각 라인에 후행 ''\ n''이 포함되어 있습니다. –
'fgets'가'NULL'을 반환하면 루프를'중단 '해야합니다. 그 체크가 없으면 사용자가'EOF'를 생성하는 키 조합을 누르면 무한 루프가됩니다. 이 키 조합은 유닉스 시스템에서는 control-D이고 윈도우에서는 control-Z이다. – user3386109
'malloc' 다음에는'buf [0] = '\ 0';'행이 있어야합니다.'malloc'에 의해 반환 된 버퍼에 문자열 "Exit!"가 포함될 가능성은 거의 없습니다. ' – user3386109