int main(int argc, char **argv){
    char *str = argv[1];
    size_t len = strlen(str);
    char *dst = calloc(len+1, sizeof(char));
    int i;
    for(i=len-1; i>=0; i--){
        memcpy(dst, str+i, 1);
        dst++;
    }
    *(++dst) = '\0';
    printf("%s\n", dst);
    free(dst);
    return 0;
}

省略错误检查以提高可读性
我不明白为什么我得到一个segfault消息:“glibc free():无效指针:”
我试图编写一个小程序,使用指针反转字符串,但是:
1)最后一次打印没有打印任何内容;
2)我有一个segfault

最佳答案

问题是您正在更改计算中的指针。
尝试使用temporiginal进行如下操作:

int main(int argc, char **argv){
    char *str = argv[1];
    size_t len = strlen(str);
    char *dst = calloc(len+1, sizeof(char));
    char *origDst = dst;
    int i;
    for(i=len-1; i>=0; i--){
        memcpy(dst, str+i, 1);
        dst++;
    }
    *(dst) = '\0';
    printf("%s\n", origDst);
    free(origDst);
    return 0;
}

关于c - 在C中的字符串反转期间释放指针时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15324016/

10-15 06:43