[英]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.