我正在尝试打印反向的字符串/数组。我使用了以下代码,它似乎能够按照第一个数组revString
的正确顺序提供第二个数组string
的值。我还可以在两个数组中打印单个字符,并且可以打印第一个数组的整个字符串。但是revString
数组根本不打印。我想知道我是否在这里遗漏了一个要点。
void reverseString(char string[]) {
int i = strlen(string);
int i_2 = 0;
revString arrayet
char revString[i + 1];
char *character;
while (i > -1) {
character = &string[i];
revString[i_2] = *character;
printf("%c", revString[i_2]);
i = i - 1;
i_2 = i_2 + 1;
}
revString[i_2] = '\0';
printf("%d\n", i_2);
printf("%s", revString);
}
代码现在给出以下输出,并带有示例字符串"Hello World"
;
dlrow olleH13
如您所见,最终的printf
语句不起作用
答案 0 :(得分:2)
在C语言中,索引基于0。因此,如果您输入长度为10的字符串,则最后一个字符将位于索引9。
在您的代码中,当您向revString分配字符时,您的代码正在尝试访问string [len]。
您的代码应该是这样的。
int i = strlen(string) - 1;
答案 1 :(得分:1)
您的代码会反转字符串string
,其中包括位于string[i]
的空终止符。结果数组以空终止符开头,因此printf
不输出任何内容。
这是修改后的版本:
void reverseString(char string[]) {
int i = strlen(string);
int i_2 = 0;
char revString[i + 1];
char character;
while (i > 0) {
i = i - 1;
character = string[i];
revString[i_2] = character;
//printf("%c", revString[i_2]);
i_2 = i_2 + 1;
}
revString[i_2] = '\0';
printf("%d\n", i_2);
printf("%s", revString);
}
输出:
11
dlrow olleH