Memory 字符串及其回文

Memory 字符串及其回文,memory,malloc,heap,palindrome,Memory,Malloc,Heap,Palindrome,此函数的目的是创建带有回文的字符串concat。例如 abc->abccba 这是我的代码,结果仍然显示原始字符串,没有任何更改。我为字符串及其回文保留了一些空格,但它仍然不起作用 char *mirror(const char *str) { char *result = malloc(2 * strlen(str) * sizeof(char)); int str_len = strlen(str); for (int i = 0; i < str_len; +

此函数的目的是创建带有回文的字符串concat。例如 abc->abccba

这是我的代码,结果仍然显示原始字符串,没有任何更改。我为字符串及其回文保留了一些空格,但它仍然不起作用

char *mirror(const char *str) {
    char *result = malloc(2 * strlen(str) * sizeof(char));
    int str_len = strlen(str);
    for (int i = 0; i < str_len; ++i) {
        result[i] = str[i];
    }
    for (int j = str_len; j < 2*str_len; ++j) {
        result[j] = str[2*str_len-j];
    }
    return result;
}
char*mirror(const char*str){
char*result=malloc(2*strlen(str)*sizeof(char));
int str_len=strlen(str);
对于(int i=0;i
代码无法分配和追加空字符

最好使用
size\t
进行数组索引和大小调整

检查分配失败

char *mirror(const char *str) {
    size_t length = strlen(str);
    char *result = malloc(2*length + 1);  // + 1 for \0
    if (result) {

      size_t r;
      for (r = 0; r < length; ++r) {
        result[r] = str[r];
      }

      size_t j = length;
      for (; r < length*2; ++r) {
        result[r] = str[--j];
      }

      result[r] = '\0';
    }
    return result;
}
char*mirror(const char*str){
长度=strlen(str);
char*result=malloc(2*length+1);//+1表示\0
如果(结果){
大小;
对于(r=0;r