[英]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.