Xpectations 2018-11-10 10:59 采纳率: 100%
浏览 626
已采纳

关于realloc()使用的问题

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct HString {
    char *ch=NULL;  //需要初始化
    int length=0;
}HString;

void hsAssign(HString &T,char s[]) {
    if (T.ch)
        free(T.ch);
    T.ch = (char*)malloc(sizeof(char));
    if (!T.ch) {
        printf("Fail to create the string.");
        return;
    }
    T.length = strlen(s);
    for (int i = 0; i < strlen(s); i++)
        T.ch[i] = s[i];
}

int hsCompare(HString T, HString S) {
    //若S>T,则返回值>0
    for (int i = 0; i < T.length&&i < S.length; i++)
        if (T.ch[i] != S.ch[i]) 
            return S.ch[i] - T.ch[i];  //返回的是ASCII码的差
    return S.length - T.length;
}

int hsClear(HString &T) {
    free(T.ch);
    T.ch = NULL;
    T.length = 0;
    return 1;//确认清空串操作是否成功
}

void hsConcat(HString &con, HString T, HString S) {
    if (con.ch)
        free(con.ch);
    con.ch = (char*)malloc(sizeof(char));//确保con被分配了新的存储空间
    for (int i = 0; i < T.length; i++)
        con.ch[i] = T.ch[i];
    for (int i = T.length; i < T.length +  S.length; i++)
        con.ch[i] = S.ch[i - T.length];
    con.length = T.length + S.length;
}

void hsSub(HString &sub, HString T, int pos, int len){
    if (pos -1> T.length || pos <= 0 || pos + len -1> T.length || len < 0) {
        printf("Wrong input.");
        return;
    }
    int count = 0;
    if (sub.ch)
        free(sub.ch);
    sub.ch = (char*)malloc(sizeof(char));
    for (int i = pos - 1; i <=pos + len - 2; i++)
        sub.ch[count++] = T.ch[i];
    sub.length = len;
}

void hsInsert(HString &S, int pos, HString T) {
    int count = 0;
    if (pos <= 0 || pos - 1 > S.length) {
        printf("Wrong input");
        return;
    }
    for (int i = S.length - 1; i >= pos - 1; i--)
        S.ch[i + T.length] = S.ch[i];
    for (int i = pos - 1; i <= pos + T.length - 2; i++)
        S.ch[i] = T.ch[count++];
    S.length += T.length;
}

void hsPrint(HString T) {
    for(int i=0;i<T.length;i++)
        printf("%c", T.ch[i]);
}

int main() {
    HString T, S1,S2;
    char s[20];
    scanf_s("%s", s, 20);
    hsAssign(S1, s);
    scanf_s("%s", s, 20);
    hsAssign(S2, s);
    hsInsert(S1, 2, S2);
    hsPrint(S1);
    return 0;
} 

在hsInsert()函数中如果使用了S.ch=(char*)realloc(S.ch,(T.length+S.length)*sizoef(char));
结果是tTEST
而如果不用realloc()函数 结果是tTESTest
请问这是为什么?

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2018-11-10 15:49
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化