繁体   English   中英

C:如何在可用内存中放置一个任意数组? (基本)

[英]C: How to put an arbitrary array in available memory? (basic)

因此,我正在尝试编写一个简单的程序来反转字符串。 当涉及到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()和更多冗长的声明。

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

for ,将counter - 1更改为counter = counter-1或等效地--counter

再增加一个字符到reversed大小,并将其设置为'\\0' ,使它以null终止。 或者,您可以使用以下方法限制打印的字符数:

printf("The reversed: %.*s\n", counter2, reversed);

首先,将\\0字符放入数组中,创建一个空字符串。

快速修复,更改

for(counter - 1; counter >= 0; counter--){ 

进入

for(--counter; counter >= 0; counter--){ 

您需要学习使用警告进行编译:

gcc -Wall yourfile.c

In function 'reverser':
11: 5: warning: statement with no effect [-Wunused-value]

for语句的第一部分是赋值: counter - 1不赋值。 因此它什么也没做,因此您会得到警告,告诉您您没有做任何有用的事情。

你可能想了解另一种真正有用的操作是, opperator。 它使您可以在循环主体中使用更少的行来完成这样的循环。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM