C:数组元素可用性差异?

d0r*_*ife 0 c memory arrays

所以,我发现了一个"差异" - 或者更可能是我对C中数组理解的差距.下面是一个简单的程序来反转字符串.在代码的注释中注明了差异.

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

void reverser(char to_bb[]){
    printf("%s\n", to_bb[some_valid_number]); /* This results in a bus error */
    int counter = strlen(to_bb);              /* ^ Assume actual integer */
    char reversed[counter];         
    int counter2 = 0;
    for(--counter; counter >= 0; counter--){     
        reversed[counter2] = to_bb[counter];  /* This does not */
        counter2++;
    }
    reversed[counter2] = '\0';
    printf("The reversed: %s\n", reversed);
}

int main(){
    char to_be_reversed[20];
    puts("Enter the string to be reversed: ");
    scanf("%19s", to_be_reversed);
    reverser(to_be_reversed);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么printf();导致总线错误,同时调用元素将它们交换到不同的数组呢?他们不是在说同样的话吗?

oua*_*uah 7

printf("%s\n", to_bb[some_valid_number]);
Run Code Online (Sandbox Code Playgroud)

s转换说明符需要指向char但是to_bb[some_valid_number]类型的指针char.

要获取指向to_bb[some_valid_number]对象的指针,可以使用&运算符:

printf("%s\n", &to_bb[some_valid_number]);
Run Code Online (Sandbox Code Playgroud)

如果您想要打印to_bb[some_valid_number]字符,请使用c转换说明符:

printf("%c\n", to_bb[some_valid_number]);
Run Code Online (Sandbox Code Playgroud)