c - strcat 和 malloc

标签 c string malloc

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

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

问题是,即使在我释放字符串并重新分配内存之后,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;
    }
}

最佳答案

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

关于c - strcat 和 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000359/

相关文章:

c - 构建编译器 - 如何检查 char 数组是否为空(使用 fgets)

使用包装函数调用 Malloc

firefox - jemalloc 是如何工作的?有什么好处?

java - 我可以使用 Java 中的 if/else 语句向字符串添加单词吗?

python - 在python中查找给定字符串的所有可能排列

c++ - 从 XML 解析字符串时向 n 添加额外的反斜杠

c - C中的内存泄漏,结构中的二维数组

java - java.io.Serializable 的 C/C++ 等价物是什么?

c - 如何为c中的地址添加值

c - 如何将一个指针分配给另一个不同类型的指针