【发布时间】:2016-05-20 07:22:33
【问题描述】:
我有这个代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* creatString();
void printWordsThatStartWithLETTER(char letter, char *str);
void main()
{
char *strEx1;
char letter;
strEx1=creatString();
printf("Enter a letter:\n");
scanf("%c",&letter);
printWordsThatStartWithLETTER(letter, strEx1);
free(strEx1);
}
char* creatString()
{
char *str, *strTemp;
int size;
strTemp=(char*)malloc(256);
printf("enter your string:\n");
flushall();
gets(strTemp);
size = strlen(strTemp);
str=(char*)malloc(size);
strcpy(str,strTemp);
//puts(str);
free(strTemp);
return str;
}
void printWordsThatStartWithLETTER(char letter, char *str)
{
int sizeOfStrinf, i;
sizeOfStrinf = strlen(str);
for(i=0;i<sizeOfStrinf;i++)
{
if((str[i]==letter)||(str[i]==letter-32))
{
if(i==0)
{
while(str[i]!=32)
{
printf("%c",str[i]);
i++;
}
printf("\n");
}
else
if(str[i-1]==32)
{
while(str[i]!=32)
{
printf("%c",str[i]);
i++;
}
printf("\n");
}
}
}
}
它不会免费strEx1,我有溢出。如何正确释放strEx1?
【问题讨论】:
-
最小代码、输入、观察到的输出、预期的输出。
-
warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] -
str=(char*)malloc(size);-->str=malloc(size+1); -
它是非标准的,但
strdup()被广泛使用:str = strdup(strTemp)