动态C - char指针,strcpy,strcat

时间:2014-06-16 13:25:25

标签: c strcpy strcat char-pointer

这是我的代码:

nodebug void sendLogPacketS(char *func, char *msg)
{
    char * log;
    memset(log, 0, strlen(func) + strlen(msg) + 1);
    strcpy(log, func);
    strcat(log, ": ");
    strcat(log, msg);
    sendUDPLogPacket(log, strlen(log));
}

它应该采用两个字符串,将它们连接在一起,然后将新字符串及其长度传递给另一个函数。我正在使用Dynamic C 9.62,它不支持malloc函数,因此我使用的是memset。

问题是当我在传递给log之前打印sendUDPLogPacket的值时,它包含垃圾DynamiCUniversal Rabbit BIOS Version 9.50\?^>j。任何人都有任何想法,为什么这不起作用?

2 个答案:

答案 0 :(得分:2)

您的代码有未定义的行为。

您无法有效地访问未初始化指针所指向的内存,就像您一样。

memset()函数写入内存,它不会神奇地分配新内存(它需要输入指向要写入的内存的指针),你无论如何都不能使用它& #34;而不是" malloc()

您可以尝试使用堆栈缓冲区:

char log[128] = "";

当然,您需要小心不要使用超过128个字符;你的无限strcat()使用是危险的。

如果您的边缘编译器支持C99,您当然可以这样做:

const size_t flen = strlen(func);
const size_t mlen = strlen(msg);
char log[flen + 2 + mlen + 1];  // Space for func, msg, colon, space, terminator.

答案 1 :(得分:0)

声明一个大小为func +大小为msg而不是未初始化的char指针的字符数组。