#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main() {
int i, j, k=0;
int len;
char *rev[3];
char *s[]={
"To err is human...",
"But to really mess things up...",
"One needs to know c!!"
};
for (i=0; i<3; i++) {
len=strlen(s[i]);
rev[i]=malloc(strlen(s[i])+1);
for (j=len-1; j>=0; j--) {
rev[i][k]=s[i][j];
k++;
}
rev[i][k]=' ';
}
for (i=0; i<3; i++)
printf("%sn", rev[i]);
}
此程序编译良好,但不运行。谁能指出逻辑错误或概念?我正在尝试将字符串倒在这里...
问题似乎是您不为每个字符串重置k
到0
(仅在程序的开头)。因此,您应该在内部for
循环之前拥有k = 0;
。
虽然您已经获得了使代码正常工作的答案,但我建议您以不同的方式进行操作。我将代码将代码转换为一个字符串转换为一个单独的函数:
char *reverse(char const *in) {
char *ret;
int j, k=0;
size_t len=strlen(in);
ret=malloc(len+1);
for (j=len-1; j>=0; j--) {
ret[k]=in[j];
k++;
}
ret[k]=' ';
return ret;
}
然后,我会根据需要将其称为main
进行反向字符串:
for (i=0; i<3; i++)
rev[i]=reverse(s[i]);
还请记住,rev
中的字符串已分配给malloc
,因此当您不再需要它们时,您应该释放它们:
for (i=0; i<3; i++) {
printf("%sn", rev[i]);
free(rev[i]);
}