【发布时间】:2020-09-22 17:10:38
【问题描述】:
我正在尝试为学校项目反转 C 中的字符串数组。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char * str) {
char * p1 = str;
int len = strlen(str) - 1;
char temp;
int m;
for (m=0; m<(len/2); m++){
temp = str[len];
str[len]= str[m];
str[m]=temp;
len=len-1;
}
return;
}
int main(void) {
char str0[] = "";
char str1[] = "123";
char str2[] = "abcd";
char str3[] = "Captain's log, Stardate 42523.7";
char str4[] = "Hello, my name is Inigo Montoya.";
char str5[] = "You can be my wingman anyday!";
char str6[] = "Executor Selendis! Unleash the full power of your forces! There may be no tomorrow!";
char * array[] = {str0, str1, str2, str3, str4, str5, str6};
for (int i = 0; i < 7; i++) {
reverse(array[i]);
printf("%s\n", array[i]);
}
return EXIT_SUCCESS;
}
我写了反向函数。问题是当我编译和运行代码时,它给出了直到 str3[] 的所有字符串的预期结果。但在那之后,它搞乱了顺序。这是输出
321
dbca
7.32524 etlog, Starda s'niatpaC
.ayotnoM oname is Inig ym ,olleH
!yadyna ne my wingmab nac uoY
!worromot on eb yam erehT !the full power of your forces hsaelnU !sidneleS rotucexE
我不知道为什么它对某些字符串有效,但对其他字符串无效。任何帮助将非常感激。
【问题讨论】:
-
我认为你需要使用一个
end变量,你可以四处移动,不要管 len 。我认为但尚未验证问题是 (len/2),而您一直在缩短 len。 -
我建议 len 只有在它的衡量标准也发生变化时才应该改变。开始使用变量名称,如
idx或带有前缀/后缀的变量来索引变量。将它们从用于幅度或计数的变量中分类更容易(len 是幅度、计数或用于计数的计数器等)。计数和其他量值通常用于限制,并且通常应该具有稳定的值,直到它们不被使用或重置。索引变量可能看起来像一个计数器,但这不是它们在代码中的主要作用,它们被用作数组的偏移量。
标签: c reverse c-strings strlen function-definition