[英]Dynamic C - char pointers, strcpy, strcat
這是我的代碼:
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
之前對其進行sendUDPLogPacket
,它包含DynamiCUniversal Rabbit BIOS Version 9.50\\?^>j
垃圾DynamiCUniversal Rabbit BIOS Version 9.50\\?^>j
。 任何人有任何想法為什么這不起作用?
您的代碼具有未定義的行為。
您不能像您一樣有效地訪問未初始化指針指向的內存。
memset()
函數寫入內存,它不會神奇地分配新的內存(它將要寫入的內存的指針作為輸入 ),無論如何您都不能“代替” 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.
用func
的大小+ msg
的大小聲明一個char數組,而不是未初始化的char指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.