【问题标题】:strcat and mallocstrcat 和 malloc
【发布时间】:2012-04-03 19:53:31
【问题描述】:

目前,我需要将 strcat() 2 个字符串放在一起。问题是我必须这样做 3 次。 (总共 6 个串联)。 过程是这样的,使用循环重复3次:

  1. Malloc 一个字符串
  2. 使用for循环,调用strcat 2次
  3. 释放字符串

问题是,即使在我释放字符串并重新 malloc 之后,strcat 似乎仍在继续连接前一个字符串。

例如:

AA BB CC DD EE FF 的预期输出

  • strcat 字符串 1:AABB
  • strcat 字符串 2:CCDD
  • strcat 字符串 3:EEFF

实际输出:

  • strcat 字符串 1:AABB
  • strcat 字符串 2:AABBCCDD
  • strcat 字符串 3:AABBCCDDEEFF

有谁知道它为什么这样做?

void sendInitialHand(card * deck) {

    char * stringToSend;
    playerNode * curNode;
    curNode = housePlayers.head;

    for (int i=0; i<housePlayers.playerCount; i++) {

        stringToSend = malloc(sizeof(char)*6);

        for (int j=0; j<52; j++) {
            if (deck[j].inPlay == curNode->playerFD) {
                strcat(stringToSend, deck[j].identifier);
            }
        }

        for (int j=0; j<52; j++) {
            if (deck[j].inPlay == 10) {
                strcat(stringToSend, deck[j].identifier);
            }
        }    

        printf("[NETWORK] Send %d the following: %s\n", curNode->playerFD, stringToSend);
        //send(curNode->playerFD, stringToSend, 6, 0);
        free(stringToSend);
        curNode = curNode->next;
    }
}

【问题讨论】:

  • 我们能看到一些代码 sn-ps 吗?
  • 显示实际代码,否则我们无法在代码中找到错误。

标签: c string malloc


【解决方案1】:

ptr=malloc(…)之后,strcat()之前,用*ptr = '\0';初始化空间。 malloc() 返回的内存通常不会归零。

【讨论】:

    【解决方案2】:

    使用 printf 语句检查你的循环结构,很可能你没有释放你认为的东西。将根据代码编辑答案..

    你只是重新malloc,它只是说嘿我要在这里写..这就是你已经说过的。尝试释放/重新初始化变量

    【讨论】:

    • 这个“答案”应该是评论。代码在您发布后几分钟到达。由于它的材料与问题没有直接关系,我建议应该将其删除(但我宁愿不投反对票以强迫你的手)。
    猜你喜欢
    • 2016-04-10
    • 2019-10-05
    • 2016-01-21
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2016-03-14
    相关资源
    最近更新 更多