C-反向字符串中的概念错误.知道其他逻辑,但想知道我在哪里做错了


#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]);
}

此程序编译良好,但不运行。谁能指出逻辑错误或概念?我正在尝试将字符串倒在这里...

问题似乎是您不为每个字符串重置k0(仅在程序的开头)。因此,您应该在内部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]);
}

相关内容

最新更新