我正在尝试运行这段代码,从用户那里获得输入“消息”,然后将该消息转换为二进制代码。我后来用表情符号将其打印为 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");
}
}
至少你的代码存在以下问题
你声明了一个包含
BITS_IN_BYTE
元素的数组
int binary_code[BITS_IN_BYTE];
所以指数的有效范围是
[0, BITS_IN_BYTE)
.
但是当
j
在这个for循环中等于0
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;
}
则变量
place
的值等于BITS_IN_BYTE
int place = BITS_IN_BYTE - j;
结果这个说法
binary_code[place] = rem;
写入数组外的内存,导致未定义的行为。
您应该按以下方式初始化变量
place
int place = BITS_IN_BYTE - j - 1;