calloc内存分配的问题
写了一个函数如下
gboolean is_text_valid(const char *text, gchar **tmp){ //判断是否是有效输
int i, start, end, len; //入并截取有效部分
start = 0;end = 0;len = 0;
while(isspace(*(text + start)) && (text + start != NULL))
start++;
end+=start;
while(isalpha(*(text + end)) && (text + end != NULL))
end++;
if(!(len = end - start))
return FALSE;
*tmp = (gchar *)calloc(len, sizeof(char));
for(i = 0; i < len; i++)
*(*tmp + i) = tolower(*(text + start + i));
// *(*tmp + len) = '\000';
return TRUE;
}
作用就是截取text前面所有空白符之后到第一个不是字母的部分,再拷贝到*tmp
所指内存去
问题是当text是例如"abcdefghijkl"时,*tmp就是"abcdefjhijkl?"之类的。
后面多出问号,括号乱码什么的,谢谢各位帮忙看一下
[解决办法]
*tmp = (gchar *)calloc(len, sizeof(char));
-----------------------------------------
*tmp = (gchar *)calloc(len + 1, sizeof(char)); //用于存放 '\0'
// *(*tmp + len) = '\000'; //这个要加,不能取消
[解决办法]
*tmp = (gchar *)calloc(len, sizeof(char));
memset(tmp, 0, sizeof(char)*len ); //作下清零操作