c在c++中出现的奇怪问题,请高手帮忙解答
我编写的c程序,在vc++中编译,出现了一个奇怪的问题。我的原程序如下,问题在程序的注释中标明:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
char *Trim(char *str)
{
char *str1;
int i = 0;
int flag=0;
if (str == NULL)
{
return NULL;
}
str1 = (char*)malloc(strlen(str)+1);
while(*str != '\0')
{
if (*str == ' ')
{
}
else
{
str1[i] = *str;
i++;
flag=1;
}
str++;
}
if (flag==0)
{
printf("The string iscomposed of blanks!\n");
return NULL;
}
str1[i] = '\0';
str=&str1[0]; //?这里会泄露内存吗????
str1=NULL; //?如果不用这个语句,free(str1)后就会运行得不到正确结果
free(str1);
return str;
}
void main()
{
char *str;
str=" dd dd dd ";
printf("The original string is: %s\n",str);
printf("After removing the blank string,It is: %s\n",Trim(str));
}