我试图了解内存分配的错误。
该函数接收一个字符串和一个字母。该函数将创建一个动态字符串,其中仅包含以字母开头的单词。
例如字符串:“这是一个测试”
信:“t”
输出:此测试
分配的内存:数组的4 * 2位(char *)。和4 * 2位分配给字符串本身(char)。
这是分配内存的部分。
int i=0,word_lenght=0,number_of_words=0,str_len=strlen(str),writer=0,current_word=0;
char** list_of_strings;
number_of_words=count_words_that_start_with_letter(str,letter);
list_of_strings=(char**)malloc(number_of_words*sizeof(char*));
for(i=0;i<str_len;i++)
{
if(str[i]==letter || str[i]==toupper(letter))
{
word_lenght = 0;
while(str[i] != ' ' && str[i] != '\0')
{
i++;
word_lenght++;
}
list_of_strings[current_word] = (char*)malloc(sizeof(word_lenght));
current_word++;
}
else
while(str[i]!=' ' && str[i]!='\0')
{
i++;
}
}
在下一部分我将输入str中的字母复制到新分配的字母。
i=0;
for(current_word=0 ; current_word < number_of_words ; current_word++)
{
writer=0;
if(str[i]==letter || str[i]==toupper(letter))
{
while(str[i]!=' ' && str[i]!='\0')
{
list_of_strings[current_word][writer]=str[i];
writer++;
i++;
}
printf("%s",list_of_strings[current_word]);
}
else
while(str[i]!=' ' && str[i]!='\0')
i++;
}
当我运行该程序时,输出为:This²²²²θΘ