目前,我需要将 strcat() 2 个字符串连接在一起。问题是我必须这样做 3 次。 (总共 6 个串联)。 程序是这样的,使用循环重复 3 次:
- 分配一个字符串
- 使用for循环,调用strcat 2次
- 释放字符串
问题是,即使在我释放字符串并重新分配内存之后,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/