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