首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcat和malloc

strcat和malloc
EN

Stack Overflow用户
提问于 2012-04-03 19:53:31
回答 2查看 4.2K关注 0票数 0

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

  1. Malloc一个字符串
  2. 使用

循环,调用strcat 2次

  1. 释放字符串

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

例如:

预期来自AA BB CC DD EE FF的输出

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

实际输出:

AABBCCDD

  • strcat

  • strcat字符串1: AABB

  • strcat字符串2:字符串3: AABBCCDDEEFF

有人知道它为什么要这么做吗?

代码语言:javascript
复制
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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-03 19:58:31

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-03 19:56:56

使用printf语句检查您的循环结构,很可能当您认为是的时候,您没有释放您认为是什么。将根据代码编辑答案。

你只会说嘿我要在这里写.你已经说过了。尝试释放/重新初始化变量

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10000359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档