有没有一种方法可以在C中分配内存,并在分配过程中将其初始化为非0的值?

问题描述 投票:0回答:2

我想知道是否有一种方法可以将字符串数组初始化为我在内存分配期间确定的值,因此它不会包含任何垃圾,并且空字符将放置在正确的位置。我知道使用calloc将分配的内存初始化为全零,但是在这种情况下,涉及字符串是没有帮助的。

我练习在C中使用指针和分配内存。在一个练习中,我编写了一个用于将字符串复制到另一个字符串的函数-在main()中,我根据用户提供的字符串长度使用malloc为两个字符串分配内存,然后用户输入第一个字符串。此时,我将第一个字符串和第二个字符串的指针(未初始化)作为参数发送到strCopy(char * str1,char * str2)。在该函数内部,我还使用了我编写的另一个基本函数来计算字符串的长度。但是,您可能会猜到,由于第二个字符串充满了垃圾,因此该函数内部的长度计算混乱了。

void strCopy(char* str1, char* str2)
{
    int str1len = str_len(str1); // basic length calculating function
    int str2len = str_len(str2);

    int i;

    for (i = 0; i < str2len; i++)
    {
        str2[i] = str1[i];
    }
    str2[i] = '\0';

    if (str2len < str1len)

    printf("There wasn't enought space to copy the entire string. %s was 
copied.\n", str2);

    else
        printf("The string %s has been copied.\n", str2);

}

现在,当在main()的循环中初始化str2时,它工作正常,但是我对其他可能的解决方案感兴趣。

非常感谢您的帮助!

c malloc dynamic-memory-allocation calloc
2个回答
1
投票

不,没有。您必须手动对其进行初始化。

如果要在分配内存时复制字符串,则可以使用strdup


0
投票

嗯,对于这种特殊情况,您可以使用memcpy。一个简单的方法可能是这样,而不是for循环:

memcpy(str2, str1, str2len);
© www.soinside.com 2019 - 2024. All rights reserved.