困惑于何时应该使用malloc函数

4

我知道如果我要将字符串输入到指针变量中,那么我需要根据接收到的输入大小来使用malloc。

但是如果我要在strchr中使用指针变量呢?例如,如果我想让指针指向字符串中的字符“z”。

char *pointer;

pointer=strchr(string,'z');

我需要申请指针内存吗?还是不必要的?

2
大多数字符串函数(例如strchr)返回指向您传递给函数的字符串中的某个位置的指针。在您的示例中,strchr返回指向string内部某个位置的指针或NULL - Some programmer dude
1
请阅读有关 malloc() 的内容,仅回答是或否会让您更加困惑。 - Iharob Al Asimi
strchr 返回一个指针,就像 string + x,其中 x 是在 string 中第一次出现 'z' 的偏移量。它是指向现有有效内存地址的指针。无需分配该内存两次。请注意,如果 stringconst char *,则 pointer 将指向只读内存,使用 pointer 更改其中的值将导致错误。在这种情况下,您需要将字符串复制到可写内存中,可以是堆栈或堆,但即使如此:我可能会使用 strdup - Elias Van Ootegem
1
最后,如果您不确定,请始终阅读参考资料,它会告诉您它返回了什么。这是C语言的好参考资料,以及其标准函数。 - Some programmer dude
C语言没有字符串类型,这完全是一种约定。而且,“将字符串输入到指针中”始终是错误的。 - too honest for this site
显示剩余2条评论
4个回答

0

如果您需要系统提供内存来存储数据,您必须使用malloc。例如,如果您想要存储一个字符串,您应该为它分配内存。

char* s = malloc(10);
strcpy(s, "something");

如果您只需要一个指向已经存在于内存中的东西的指针,那么您不必分配它,在您的情况下,strchr函数返回一个指针,该指针指向字符串s中字符c所在的内存位置。
char* c;
c = strchr(s, 'm');

0

在这里你不需要分配任何内存。如果存在,strchr函数返回字符串中第一个字符的指针。如果给定的字符串不包含字符,则返回null。

只有当您想要创建尚未创建的新内容时,才需要分配内存。在这种情况下,输入字符串已经存在,并且指针将指向该字符串中的某个位置。


0

strchr 返回 C 字符串中第一次出现的字符的指针。

它指向一个内存位置,该位置包含在 C 字符串中搜索的字符,因此无需使用 malloc 分配新内存。


0
使用malloc()为指针分配空间,然后重新分配指针是错误的。您甚至不能对其执行指针算术运算,因为那样就无法释放它。您分配内存,然后使用该内存,指针将包含该内存的地址,如果您覆盖该地址,则您的程序将无法访问该内存,甚至无法释放它。然后分配的内存是无用的,为此分配内存没有意义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接