주어진 문자열에서 문자가 사용되는 횟수를 추적하는 C로 문자 빈도 카운터를 만들고 있습니다. 2d 배열은 프로그램이 각 문자를 반복하는 동안 데이터를 추적합니다.
char* input = "The cat jumped over the fence";
int inputlength = (int) strlen(input);
//keeps track of how many times each character is used
int letterfrequencies[26][2] = {
{'a',0},
{'b',0},
{'c',0},
{'d',0},
{'e',0},
{'f',0},
{'g',0},
{'h',0},
{'i',0},
{'j',0},
{'k',0},
{'l',0},
{'m',0},
{'n',0},
{'o',0},
{'p',0},
{'q',0},
{'r',0},
{'s',0},
{'t',0},
{'u',0},
{'v',0},
{'w',0},
{'x',0},
{'y',0},
{'z',0}
};
int currentchar=0;
int letternum=0; //character position in char counting array
for (int i=0; i<inputlength; i++) {
currentchar=input[i];
letternum=0;
while (currentchar!=letterfrequencies[letternum][0]) {
letternum++;
}
printf(" Found a character ");
letterfrequencies[letternum][1]++; //Add to char counting array
printf("\n");
}
루프의 첫 번째 반복에서 (중단 점이있는 xCode 디버거를 사용하고 있습니다) 모든 것이 예상대로 작동합니다. 그러나 첫 번째 반복 후에는 다음 행이 표시됩니다.
letterfrequencies[letternum][1]++;
Thread 1 : EXC_BAD_ACCESS (code = 2, address = 0x7fff5fc2e84c)라고 말하면서 프로그램이 충돌합니다. 라인을 주석 처리하면 모든 것이 문제없이 실행됩니다. 원인은 무엇입니까?
입력 문장에는 대문자 및 소문자와 공백이 모두 포함되지만 letterfrequencies
배열에는 소문자 만 포함됩니다. 따라서 대문자 또는 공백이 있고 검색 할 때 어떤 일이 발생할지 생각해보십시오. 찾을 수 없으므로 while
계속해서 배열 범위를 벗어나 정의되지 않은 동작으로 이어 집니다.
이 isspace
함수를 사용하여 공백을 확인하고 tolower
대문자를 소문자로 변환을 사용하십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다