此函数理想情况下接受一个字符串,并根据整数返回第一个单词(或“命令”)之后的字母。即:
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";
关于Char* 在 malloc 之后返回垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903523/