>source

저는 C에서 10진수를 이진 변환기로 코딩하려고 합니다. 계산할 수 있어야 하는 가장 큰 숫자가 18,446,744,073,709,551,615이기 때문에 unsigned long long int를 사용해야 합니다. 내 교수가 사용하는 Linux 서버에서 분할 오류가 있다고 말하고 CLion 디버거에서는 "Exception= EXC_BAD_ACCESS (code=2, address=0x7ff7bc694ff8)"라고 표시하고 i= {unsigned long long} 18446744073708503289라고 주장합니다. 옳지 않다. userInput의 숫자에 상관없이 이 작업을 수행합니다.

현재 가지고 있는 것:

#include <stdio.h>int main(void)
{
  unsigned long long int userInput;
  unsigned long long int i;
  unsigned long long int binary[]= {};
  printf("Enter a number from 0 to 18,446,744,073,709,551,615: ");
  scanf("%lld", &amp;
userInput);
  printf("\nThe binary value of %lld is: ", userInput);
  if (userInput== 0)
  {
      printf("0");
  }
  else
  {
    for (i= 0; userInput > 0; i++)
    {
        binary[i]= userInput%2;
        userInput= userInput/2;
    }
    for (i -= 1; i >= 0; i--)
    {
        printf("%lld", binary[i]);
    }
  }
  printf("\n");
  return 0;
}

마지막 for 루프의 i -= 1이 제대로 보이지 않습니다.

Robert Harvey2022-02-05 21:57:55

그리고 '바이너리'는 0 또는 1 길이를 의미하기 때문에 어쨌든 약간의 과잉입니다.

pm1002022-02-05 22:04:56

@RobertHarvey 이전 루프에서 i를 카운트다운하고 있습니다.

user177325222022-02-05 22:07:10

... 하지만 i >= 0은 항상 참입니다.

user177325222022-02-05 22:09:07
  • 답변 # 1

    왜냐하면바이너리명시적인 크기가 주어지지 않았고 빈 초기화 목록이 주어졌으며 배열의 크기는 0입니다. 이러한 배열을 사용하려는 모든 시도는 트리거됩니다. 정의되지 않은 동작이 특별한 경우에 충돌이 발생합니다.

    최대 64개의 이진수를 저장해야 하므로 배열을 해당 크기로 만드십시오.

    unsigned long long int binary[64];
    

    char[..]

    pm1002022-02-05 22:05:30

    그렇게 하면 여전히 세그먼테이션 오류가 있다고 말합니다.

    Mellanie Martin2022-02-05 22:10:03
  • 이전 MSSQL 시스템 테이블과 동일한 MYSQL
  • 다음 main.c가 마지막으로 컴파일되도록 C에서 주어진 순서로 .c 파일 컴파일