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
返回的值将不再有效!
我有一个正在解析 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. Ifsubstr
points to an empty string,str
is returned.
当它说 returns 指向子字符串的第一个字符的指针时,它的意思就是字面上的意思。它指向 str
内的一个位置。在你的例子中,它 returns str + 12
。没有分配内存。
注意:这意味着如果 str
被更改或释放,strstr
返回的值将不再有效!