我知道如果我要将字符串输入到指针变量中,那么我需要根据接收到的输入大小来使用malloc。
但是如果我要在strchr
中使用指针变量呢?例如,如果我想让指针指向字符串中的字符“z”。
char *pointer;
pointer=strchr(string,'z');
我需要申请指针内存吗?还是不必要的?
如果您需要系统提供内存来存储数据,您必须使用malloc。例如,如果您想要存储一个字符串,您应该为它分配内存。
char* s = malloc(10);
strcpy(s, "something");
strchr
函数返回一个指针,该指针指向字符串s
中字符c
所在的内存位置。char* c;
c = strchr(s, 'm');
在这里你不需要分配任何内存。如果存在,strchr函数返回字符串中第一个字符的指针。如果给定的字符串不包含字符,则返回null。
只有当您想要创建尚未创建的新内容时,才需要分配内存。在这种情况下,输入字符串已经存在,并且指针将指向该字符串中的某个位置。
strchr
返回 C 字符串中第一次出现的字符的指针。
它指向一个内存位置,该位置包含在 C 字符串中搜索的字符,因此无需使用 malloc
分配新内存。
malloc()
为指针分配空间,然后重新分配指针是错误的。您甚至不能对其执行指针算术运算,因为那样就无法释放它。您分配内存,然后使用该内存,指针将包含该内存的地址,如果您覆盖该地址,则您的程序将无法访问该内存,甚至无法释放它。然后分配的内存是无用的,为此分配内存没有意义。
strchr
)返回指向您传递给函数的字符串中的某个位置的指针。在您的示例中,strchr
返回指向string
内部某个位置的指针或NULL
。 - Some programmer dudemalloc()
的内容,仅回答是或否会让您更加困惑。 - Iharob Al Asimistrchr
返回一个指针,就像string + x
,其中x
是在string
中第一次出现'z'
的偏移量。它是指向现有有效内存地址的指针。无需分配该内存两次。请注意,如果string
是const char *
,则pointer
将指向只读内存,使用pointer
更改其中的值将导致错误。在这种情况下,您需要将字符串复制到可写内存中,可以是堆栈或堆,但即使如此:我可能会使用strdup
。 - Elias Van Ootegem