所以,我正在尝试制作一个简单的程序来反转字符串。在谈到C时,我非常湿透了耳朵,特别是在理解记忆方面。这是我的代码:
#include <stdio.h>
#include <string.h>
void reverser(char to_bb[]){
int counter = strlen(to_bb); /* size of entry */
char reversed[counter]; /* creating blank array of same size */
int counter2 = 0;
for(counter - 1; counter >= 0; counter--){ /* loop to swap chars */
reversed[counter2] = to_bb[counter];
counter2++;
}
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;
}
问题是,我不断收到总线错误。我使用sizeof(to_bb)
并且知道它是4位,表明to_bb[]
仅仅是我的void函数中的指针。我已经尝试了很多方法来提取字符串,以便我可以操作它(即调用它的元素),但我没有找到成功。我使用strcpy()
尝试*
和更多冗长的声明。
感谢您的任何建议。记忆证明难以理解!
答案 0 :(得分:1)
在for
中,将counter - 1
更改为counter = counter-1
或等同于--counter
。
将另外一个字符添加到reversed
的大小并将其设置为'\0'
,以使其终止。或者,您可以使用以下方法限制打印的字符数:
printf("The reversed: %.*s\n", counter2, reversed);
答案 1 :(得分:1)
首先将\0
字符放在数组中,创建一个空字符串。
快速修复,更改
for(counter - 1; counter >= 0; counter--){
进入
for(--counter; counter >= 0; counter--){
答案 2 :(得分:1)
你需要学习编译警告:
gcc -Wall yourfile.c
In function 'reverser':
11: 5: warning: statement with no effect [-Wunused-value]
for
语句的第一部分是赋值:counter - 1
没有赋值。因此它什么都不做,因此你得到一个警告告诉你,你没有做任何有用的事情。
您可能想要了解的另一个非常有用的运算符是,
操作符。它允许你完成这样的循环,循环体内的线条较少。
for(counter -= 1; counter >= 0; counter--, counter2++) /* loop to swap chars */
最后,您没有考虑NULL
终止符。函数strlen()
为您提供字符串中不包括 NULL
终结符的字符数。
所以你应该在循环附加之后自己解释,比如:
char reversed[counter+1];
int counter2 = 0;
for(counter - 1; counter >= 0; counter--, counter2++) /* loop to swap chars */
reversed[counter2] = to_bb[counter];
reversed[counter2] = '\0';
printf("The reversed: %s\n", reversed);