所以,我发现了一个"差异" - 或者更可能是我对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();导致总线错误,同时调用元素将它们交换到不同的数组呢?他们不是在说同样的话吗?
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)
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |