구문 내 특정 문자의 빈도를 계산하는 C 프로그램을 작성하려고합니다. 이 프로그램은 (문자를 배열에 저장하는 mmap
을 통해) 문자로 구를 읽고 현재 문자를 원하는 문자와 비교합니다. 일치하는 항목이 있으면 카운터가 증가합니다. 그러나 코드를 실행할 때 이상한 결과가 발생합니다. 디버그에서 일치하더라도 문자가 strcmp
에 대한 호출에서 일치하지 않기 때문에 주파수가 증가하지 않습니다. 이 문제를 일으키는 내 프로그램 내에서 어떤 일이 일어나고 있습니까?C - strcmp()가 제대로 작동하지 않습니다.
char* data; /* input contents from mmap */
char* currChar; /* character being compared to */
char inChar; /* character being read */
...
do {
/* get character */
inChar = 0;
inChar = data[i];
/* debug */
printf("data[i] = %c, inChar = %c, &inChar = %c, currChar = %s\n",
data[i], inChar, &inChar, currChar);
/* if match */
if (strcmp(&inChar, currChar) == 0) {
/* increment frequency */
freq++;
}
/* increment position */
i++;
} while (inChar != 0);
다음은 "and"단어에서 'a'의 빈도를 계산할 때 출력되는 샘플입니다.
data[j] = a, inChar = a, &inChar = S, currChar = a
data[j] = n, inChar = n, &inChar = S, currChar = a
data[j] = d, inChar = d, &inChar = S, currChar = a
0 instances of a
방금 대신'inChar == * currChar'을 확인 봤어
단지로 STRCMP 기능을 제거? – Baldrick
currChar가 시작되지 않았습니다. 문자를 비교하려면 '=='연산자 만 사용하십시오. –
일부 도구가 올바르게 작동하지 않는다는 제목을 볼 때마다 포스터가 초보자이며 도구가 잘못 사용되고 있다는 확률은 99.9 %입니다. 왜 문자 비교 함수를 사용하여 개별 문자를 비교하려고합니까? –