C:如何将任意数组放入可用内存? (基本)

时间:2013-01-07 19:30:44

标签: c arrays memory

所以,我正在尝试制作一个简单的程序来反转字符串。在谈到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()尝试*和更多冗长的声明。

感谢您的任何建议。记忆证明难以理解!

3 个答案:

答案 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);