为什么这段代码会输出非法指令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;
}
编译它不会产生错误,而 运行 它不会产生所需的 FizzBuzz,而只会产生这个错误:
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?
注意:我对 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;
}
编译它不会产生错误,而 运行 它不会产生所需的 FizzBuzz,而只会产生这个错误:
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?