字符串

时间:2017-09-09 10:21:39

标签: c string memory memory-management

我试图了解内存分配的错误。

该函数接收一个字符串和一个字母。该函数将创建一个动态字符串,其中仅包含以字母开头的单词。

例如字符串:“这是一个测试” 信:“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²²²²θΘ

0 个答案:

没有答案