c-理解我为什么需要malloc

  • 本文关键字:malloc c malloc
  • 更新时间 :
  • 英文 :


我想了解为什么我需要在其中使用malloc。我的代码的目标是将"]"")"";"中分离出来。像这样"];"变成"]" ";"");"变成")" ";"。CCD_ 10被用作字符串的数组。我记不起字符串数组的技术名称了。这非常有效,但它为我节省了很多时间来理解为什么将来会发生这种情况。

char  *ptr[buflen];
for(x = 0; x < n; x++)
{
    printf("ptr[x] is %s n", ptr[x]);
    cmp_str3 = strcmp(ptr[x], "];");
    cmp_str4 = strcmp(ptr[x], ");");
    if(cmp_str3 == 0)
    {
        printf("Match1 n");
        strcpy(str1, ptr[x]);
        printf("Match2 n");
        ptr[x][1] = '';
        printf("Match3 n");
        //printf("ptr[x+1] %c %d n", ptr[x+1], ptr[x+1]);
        //printf("ptr[x+1][0] %c %d n", ptr[x+1][0], ptr[x+1][0]);
        ptr[x+1] = malloc(strlen("foo") + 1);
        ptr[x+1][0] = str1[1];
        printf("Match4 n");
        ptr[x+1][1] = '';
        printf("Match5 n");
        n++;
    }
    if(cmp_str4 == 0)
    {
    }
}
cmp_str3 = 0;
cmp_str4 = 0;
memset(str1, 0, 15);
memset(str2, 0, 15);

声明

char *ptr[buflen];

创建一个指针数组。如果ptr是一个局部变量(在函数内部),那么指针最初是垃圾值,它们不指向有效内存。如果ptr是全局的或静态的,那么指针最初是NULL

在任何情况下,在使用其中一个指针指向字符串之前,该字符串需要位于内存中的某个位置。

给定线路

char *ptr[3] = {"foo", "bar", "bletch"};

编译器负责为字符串分配内存,然后将指向字符串的指针放入数组中。

但是,如果字符串不是常量,那么您必须自己为字符串分配内存。malloc就是这么做的。它分配您请求的字节数,并返回一个指向该内存的指针。您可以将该指针保存在数组中,然后使用strcpy或其他字符串函数将该字符串放入该内存中。

或者你可以一次复制一个字符,这就是你的代码所做的:

ptr[x+1] = malloc(2);     // reserves two bytes of memory, and keeps the pointer 
                          // to that memory in the array of pointers
ptr[x+1][0] = str[1];     // copies a character into the first byte of the memory
ptr[x+1][1] = '';       // marks the second byte as the end of the string

现在,内存中有一个字符串,指针数组中有一条指向该字符串的指针。

相关内容

  • 没有找到相关文章