为什么这段C代码报Illegal instruction 4,-mmacosx-version-min无法解决?
问题原因
你的代码存在3处核心错误,和macOS编译参数没有任何关系,是C语言内存操作和逻辑错误导致的崩溃:
- 非法的字符串拼接操作:你定义的
char* output = ""指向只读的字符串常量区,strcat尝试往只读地址写入数据,且该地址仅能容纳1个结束符\0,没有多余空间存储拼接后的内容,触发内存越界的未定义行为,这是出现Illegal instruction: 4报错的直接原因。 - 输出判断逻辑写反:
if (output)判断的是output指针的地址是否为空,而非判断字符串内容是否为空。此处output指针永远指向有效地址,判断永远为真,就算内存问题修复,也只会输出数字,无法打印Fizz/Buzz。 - 判断逻辑冗余:你遍历1-5的整除规则,其中1、2、4对应的数组内容为空,就算整除也不会改变输出,属于无效逻辑。
修正后的可运行代码
#include <stdio.h> #include <string.h> int main() { for (int i = 1; i <= 100; i++) { // 定义可写的字符数组作为输出缓冲区,初始化全为空 char output[10] = {0}; if (i % 3 == 0) { strcat(output, "Fizz"); } if (i % 5 == 0) { strcat(output, "Buzz"); } // 判断字符串内容是否为空 if (strlen(output) == 0) { printf("%d\n", i); } else { printf("%s\n", output); } } return 0; }
内容的提问来源于stack exchange,提问作者gurkensaas
相关产品推荐
相关产品推荐

