이것은 내가 시도한 것으로, 내 논리는 tmp
왼쪽으로 31 번 이동하면 사용자 입력 정수 I
과 비교되고 1 또는 0 값이 색인에 삽입됩니다. str[0]
->str[31]
이고, 널 종료 str[32]
은 \0
입니다.정수를 이진수로 변환하는 코드
그러나 세그먼트 오류가 발생합니다.
P. 이 함수의 매개 변수를 변경할 수 없으며 교수님은 str
의 크기를 주 메뉴에서 33으로 설정 했으므로 변경할 수 없습니다.
void int2bitstr(int I, char *str) {
int tmp = 1 << 31;
do{
*str++ = !!(tmp & I) + '0';
} while(tmp >>= 1);
*str = '\0';
}
'int'가 서명되어 있습니다. 그것에 대해 잊어 버린 적이 있습니까? –
나는 항상 [Valgrind] (https://www.valgrind.org)를 사용하여 segfaults를 이해합니다 –
유진 (Eugene)이 말한 것을 기반으로,'tmp'의 값을 콘솔에 출력하면 출력에 놀랄 것 같아요. 각 반복, 특히 루프 종료 절을 고려해야합니다. – WhozCraig