strstr() return 是否是指向已分配内存的指针,需要我稍后手动释放它?

Does strstr() return a pointer to malloced memory, requiring me to manually free it later?

我有一个正在解析 API 调用的解析器方法。我在我的解析函数中使用 strstr() 。 我的 parse_api 函数允许我 return 由 strstr 编辑的指针 return。 我是否正确地假设这意味着 strstr mallocs 内存 space 并且我需要释放它?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

char *parse_api(char *str);

int main() {
    char str[] = "dadsadsdsdsdamountdsafoodsd";
    puts(parse_api(str));
    return 0;
}
  
char *parse_api(char *str) {
    char *needle;
    char *updated_needle;
    needle = strstr(str, "amount");
    puts(needle);
    updated_needle = needle + 9;
    updated_needle[strlen(updated_needle) - 3] = '[=11=]';
    return updated_needle;
}

strstr 函数 而不是 return 分配的内存。它 return 是指向 haystack 参数内子字符串开头的指针。

所以在这种情况下 strstr 将 return str + 12.

文档中strstr对返回值的描述如下:

Pointer to the first character of the found substring in str, or a null pointer if such substring is not found. If substr points to an empty string, str is returned.

当它说 returns 指向子字符串的第一个字符的指针时,它的意思就是字面上的意思。它指向 str 内的一个位置。在你的例子中,它 returns str + 12。没有分配内存。

注意:这意味着如果 str 被更改或释放,strstr 返回的值将不再有效!