簡體   English   中英

Char* 在 malloc 后返回垃圾值?

[英]Char* returns garbage value after malloc?

理想情況下,此函數接受一個字符串並基於整數返回第一個單詞(或“命令”)之后的字母。 IE:

input: "write 1234"      //valLen = 4  and  inputStr = "write 1234"
output: "1234"          

“提取功能”:

char* ExtractValue(unsigned int *valLen, char *inputStr)
{
int sizeToAllocate = strlen(inputStr) - (strlen(inputStr) - *valLen) + 1;
unsigned int i = 0;
int count = 0;

/* memory aloc */
printf("Assigning %d bits of space...\n", sizeToAllocate);
char *outStr = (char*)malloc(sizeToAllocate);
if (!outStr)
{
    perror("Error allocating memory");
    abort();
}

/*sets final string to value entered*/
for (i = 0; i < strlen(inputStr); i++)
{
    if (strlen(inputStr) - i <= *valLen)
    {
        outStr[count] = inputStr[i];
        count++;
    }
}

return outStr;
}

它在大多數情況下都有效; 然而,由於某種原因,返回字符串總是由垃圾值處理。 似乎malloc()outstr初始化為已使用的內存(其中包含一堆亂碼)並且 for 循環在其開頭添加字符。 一個例子是:

input: "write 1234"
output: "1234══²²²²¼"

為什么會那樣做? 非常感謝任何解釋,謝謝!

你已經回答了你自己的問題! malloc只是分配內存,並不費心清除之前存在的任何內容。 您可以使用calloc獲取已清零的內存塊,或修改循環以在字符串末尾添加空字符。

/*sets final string to value entered*/
for (i = 0; i < strlen(inputStr); i++)
{
    if (strlen(inputStr) - i <= *valLen)
    {
        outStr[count] = inputStr[i];
        count++;
    }
}

/* null terminate the string */
outStr[count++] = "\0";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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