簡體   English   中英

動態C-char指針,strcpy,strcat

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM