簡體   English   中英

嘗試運行C代碼時出現Eclipse錯誤

[英]Eclipse error when trying to run C code

我正在嘗試理解二進制和十六進制數字。 我想知道為什么我的程序無法在Eclipse中啟動。 它給了我這個錯誤:

launch has encountered a problem

當我使用int時,它正在運行。 我的電腦是64位的。 我正在嘗試了解硬件。 我需要知道我在做什么錯。 我可以改善什么? 可以將buffer聲明為全局變量嗎? 謝謝。

我的代碼在這里。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * convertBase(unsigned long int numberToConvert, long int base)
{

    char buffer[65];
    char *pConvertedNumber;
    char allValues[] = "0123456789abcdef";

    pConvertedNumber = &buffer[sizeof(buffer)-1];

    *pConvertedNumber = '\0';

    do {

        int value = numberToConvert % base;

        pConvertedNumber = pConvertedNumber - 1;

        *pConvertedNumber = allValues[value];

        numberToConvert /= base;

    } while(numberToConvert != 0);

    printf("%s", pConvertedNumber);

    return pConvertedNumber;
}

int main(void){

    unsigned long int numberOne = 1000000000;
    printf("\n%ld in Base 16 = ", numberOne);
    convertBase(numberOne, 16);

    printf("\n");

return 0;
}

或者,您可以使用sprintf(buffer,“%x”,numbertoConvert),其基數為16。但是,如果基數不是八進制或十六進制,則下面的例程將起作用。

編輯注意,這僅限於小於16的基數,ABCDF定義與十六進制相同(基數可以為11、12、13、14或15)。 轉換仍然可以正確進行。

編輯我還可以將基本字符列表更改為字符串數組,並使用strcat,但是我將由您自己決定。 allValues [] = {“ 0”,“ 1”,...} strcat(buffer,allValues [value]);

您正在嘗試打印不帶任何'\\ 0'的緩沖區(以%s表示),這表示它沒有終止。 該代碼應為

size_t processBase(int numberToConvert, int base, char* mybuffer)
  {
    size_t mysize = 0;
    mybuffer[0] = '\0';
    if (base > 16 || base < 2)
    {
      printf("Invalid base specified\n");
      return mysize;
    }
    switch(base)
    {
      case 16:
      {
        sprintf(mybuffer, "%#x", numberToConvert);
        break;
      }
      case 8:
      {
        sprintf(mybuffer, "%#o", numberToConvert);
        break;
      }
      case 10:
      {
        sprintf(mybuffer, "%d", numberToConvert);
        break;
      }
      default:
      {
        convertBase(numberToConvert, base, mybuffer);
        break;
      }
    }

    printf("%s\n", mybuffer);
    mysize = strlen(mybuffer);
    return mysize;
  }

void convertBase(int numbertoConvert, int base, char *rbuffer)
{
  char buffer[65];
  char *pConvertedNumber;
  char allValues[] = "0123456789abcdef";
  size_t mysize;

  buffer[0] = '\0'; // This initializes the buffer
  pConvertedNumber = &buffer;
  do {

      int value = numberToConvert % base;

      *pConvertedNumber = allValues[value];
      pconvertedNumber += 1;
      *pconvertedNumber = '\0';

      numberToConvert /= base;

  } while(numberToConvert != 0);

  mysize = strlen(buffer);  // This shows the number of characters
  for (int i = 1; i <= mysize; i++)
    {
       rbuffer[mysize-i] = buffer[i-1];
    }
  rbuffer[mysize] = '\0';
}

int main(void)
{
  unsigned long int numberOne = 1000000000;
  int base = 12
  mybuffer[65];
  printf("\n%ld in Base %d = ", numberOne, base);
  size_t mysize = processBase(numberOne, base, mybuffer);

  printf("Has %d characters\n", mysize);

  return 0;
}

..或不反轉字符串,並由調用方提供緩沖區:

 #include <stdio.h>

const char* hexlat="0123456789ABCDEF";

char * convertBase(unsigned long int numberToConvert, int base, char *output){
  if(numberToConvert>base) output=convertBase(numberToConvert/base,base,output);
  *output=hexlat[numberToConvert % base];
  return output+1;
};

int main(void) {
    unsigned int numToConvert=1000000000;
    char ascResult[64];
    *convertBase(numToConvert,16,ascResult)='\0';
    printf("%s",ascResult);
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM