我试图运行这段代码,我从用户那里得到输入“消息”,并将该消息转换为二进制代码。我后来用emoji将其打印为1的亮灯泡和0的暗灯泡。然而,我在终端上输入我的输入后一直得到“分割错误(核心转储)”。有人知道为什么吗?在这种特殊情况下,这意味着什么?谢谢!
int main(void)
{
// prompt for message
string message = get_string("message: ");
int len = strlen(message);
for (int i = 0; i < len; i++)
{
int value = message[i];
int binary_code[BITS_IN_BYTE];
// convert to binary
for (int j = 0; j < BITS_IN_BYTE; j++)
{
int rem;
int place = BITS_IN_BYTE - j;
rem = value % 2;
binary_code[place] = rem;
value /= 2;
}
// print bulbs
for (int k = 0; k < BITS_IN_BYTE; k++)
{
print_bulb(binary_code[k]);
}
printf("\n");
}
}
1条答案
按热度按时间cig3rfwq1#
至少你的代码有以下问题。
您声明了一个包含
BITS_IN_BYTE
元素的数组因此索引的有效范围是
[0, BITS_IN_BYTE)
。然而,当
j
等于0
时,在这个for循环中然后变量
place
的值等于BITS_IN_BYTE
因此这一声明
写入数组外部的内存,导致未定义的行为。
您应该按以下方式初始化变量
place