Char* 在 malloc 之后返回垃圾值?

标签 c char malloc

此函数理想情况下接受一个字符串,并根据整数返回第一个单词(或“命令”)之后的字母。即:

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/

相关文章:

java - 在手机上为 Android 开发

c - 在这个简单的例子中,为什么我没有从 gcc 收到 "used uninitialized"警告?

c - 尽管声明了 const 限定符,为什么嵌套结构成员会发生更改?

在 malloc 期间转换 size_t 以在 c 中初始化 char* 数组

C语言字母数字检查错误字符

c - strcasecomp 在我的代码中不起作用

c - 顺序搜索在 C 中不起作用

string - Haskell 无法将预期类型 'String' 与实际类型 'Char' 匹配

C++ 字符数组损坏?

c++ - 将 malloc 转换为 new