我想了解为什么我需要在此使用malloc。我的代码的目标是将$('#event-form').on('submit', function(e){
// do your validation code
// ...
// if all is ok
$.ajax(...)
// else
e.preventDefault();
})
和"]"
与")"
分开。因此";"
将"];"
"]"
和";"
改为");"
")"
。 ";"
被用作字符串数组。我不记得字符串数组的技术名称。这很有效,但它可以节省我很多时间来理解为什么会发生这种情况。
ptr
答案 0 :(得分:0)
声明
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] = '\0'; // marks the second byte as the end of the string
所以现在你在内存中有一个字符串,并且在指针数组中有一个指向该字符串的指针。