gpt4 book ai didi

c - 尝试运行 C 代码时 Eclipse 错误

转载 作者:行者123 更新时间:2023-11-30 17:12:09 25 4
gpt4 key购买 nike

我正在尝试理解二进制和十六进制数字。我想知道为什么我的程序无法在 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(缓冲区, allValues[值]);

您正在尝试打印不带任何“\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;
}

关于c - 尝试运行 C 代码时 Eclipse 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com