0

因此,我发现了一个“差异”——或者,更可能的是,我对 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;
}

为什么会printf();导致总线错误,而调用元素将它们交换到不同的数组中却不会?他们不是叫同一个东西吗?

4

1 回答 1

7
printf("%s\n", to_bb[some_valid_number]);

s转换说明符需要一个指向charto_bb[some_valid_number]类型为的指针char

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

printf("%s\n", &to_bb[some_valid_number]);

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

printf("%c\n", to_bb[some_valid_number]);
于 2013-01-07T20:21:03.020 回答