为什么这段代码会输出非法指令4 为什么-mmacosx-version-min 不能解决?

Why does this code output illegal instruction 4 and why doesn't -mmacosx-version-min solve it?

注意:我对 C 还是很陌生。

所以我有一个非常复杂的程序应该输出 FizzBuzz:

#include <stdio.h>
#include <string.h>

int main() {
    char* theArray[] = {"", "", "Fizz", "", "Buzz"};
    int size = sizeof(theArray)/sizeof(theArray[0]);
    for (int i = 1; i < 100; i++) {
        char* output = "";
        for (int j = 0; j < size; j++) {
            if (i % (j+1) == 0) {
                strcat(output, theArray[j]);
            }
        }
        if (output) { 
            printf("%d", i); 
        } else { 
            printf("%s", output); 
        }
        printf("\n");
    }
    return 0;
}

编译它不会产生错误,而 运行 它不会产生所需的 FizzBu​​zz,而只会产生这个错误:

Illegal instruction: 4

我尝试使用编译器标志 -mmacosx-version-min=12.0 编译它,因为这是我当前使用的版本,也是 -mmacosx-version-min=10.x,因为它是由 this question 建议的,但是,没有任何帮助。

C 不像大多数语言那样有字符串 class。它没有的字符串 class 不是 char*.

每个 char* 需要指向某处分配的内存,否则您将无法使用它。如果您将它设置为指向 string literals"these things",那么您必须知道它们是只读的。并且只有必要的大小才能包含写入它们的字符串。它们也不会调整大小,所以像 "" 这样的东西是一个非常无用的东西。

这意味着你必须按顺序学习数组,然后是指针,然后是字符串。你没有,所以你的程序充满了错误,在这些错误中,你写入的指针未指向充分分配的 space,或指向只读位置。从阅读开始:



What is the difference between char s[] and char *s?