C - 数组不能使用索引变量

Sug*_*ime 1 c arrays propeller-tool

我使用变量作为数组的索引时遇到问题.代码基本上是这样的:

int index;
void main() {
    index = 1;
    doStuff();
}
void doStuff() {
    char** myArray;
    myArray[0] = (char*)"Foo";
    myArray[1] = (char*)"Bar";
    print("%s", myArray[index]);
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

print("%s", myArray[1]);
Run Code Online (Sandbox Code Playgroud)

它工作正常.任何人都可以帮我吗?

它应该只是C代码,但如果它很重要,它用于Parallax芯片,而我正在使用Simple IDE.

das*_*ght 6

你的阵列

char** myArray;
Run Code Online (Sandbox Code Playgroud)

不是一个阵列.这是一个指针.在你分配之前,它无处可指.任何解除引用都会产生不确定的行为.

取消引用未定义的指针正是您在此处所做的:

myArray[0] = (char*)"Foo";
Run Code Online (Sandbox Code Playgroud)

由于指针不指向有效的内存块,因此不起作用.您需要做的是使其工作首先分配myArray.例如,你可以用malloc:

char** myArray = malloc(2 * sizeof(char*));
Run Code Online (Sandbox Code Playgroud)

你的代码现在可以运行了.为了避免内存泄漏,请添加free(myArray)doStuff函数末尾.

  • @MrLister:从理论上讲,只要你不包含`<strings.h>`(或者你有`index`函数的头文件),这一定是可能的.当然还是糟糕的风格. (2认同)