#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]='\0';
}
for (i=0; i<3; i++)
printf("%s\n", rev[i]);
}
这个程序编译好但不运行。任何人都可以指出逻辑错误或概念吗?我试图在这里扭转字符串......
答案 0 :(得分:2)
问题似乎是您不会为每个字符串重置k
到0
(仅在程序开头)。因此,您应该在内部k = 0;
循环之前for
。
答案 1 :(得分: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]='\0';
return ret;
}
然后我会从main
调用它来根据需要反转字符串:
for (i=0; i<3; i++)
rev[i]=reverse(s[i]);
另请注意,rev
中的字符串已分配malloc
,因此当您不再需要它们时,您应该释放它们:
for (i=0; i<3; i++) {
printf("%s\n", rev[i]);
free(rev[i]);
}