This question already has answers here:
Closed 3 years ago.
Returning a pointer to an automatic variable
(8个答案)
这是我的代码,当我返回“fo”时,结果是“0x7fffffffd870”fo
,我的问题是如何使它返回“fo”?
更新,这里是正确的代码,但我不知道
(8个答案)
这是我的代码,当我返回“fo”时,结果是“0x7fffffffd870”fo
,我的问题是如何使它返回“fo”?
#include <stdio.h>
#include <string.h>
#include <regex.h>
char *substr(char *s, int from, int to) {
int n = to - from + 1;
char subs[n];
strncpy(subs, s + from, n);
return subs;
}
int main(int argc, char **argv) {
char *s = substr("foo", 0, 1);
puts(s);
return (0);
};
更新,这里是正确的代码,但我不知道
char subs[n]
和char* subs=malloc(n)
之间有什么区别char *substr(char *s, int from, int to) {
int n = to - from + 1;
char *subs = malloc(n);
strncpy(subs, s + from, n);
return subs;
}
int main(int argc, char **argv) {
char *s = substr("foo", 0, 1);
puts(s);
return (0);
};
最佳答案
update,这里是正确的代码,但是我不知道char subs[n]和char*subs=malloc(n)之间有什么区别
不同之处在于char subs[n]
是一个本地数组,在堆栈上分配。它的生存期是直到函数substr
终止。函数块外部无法访问此数组。
但当您将内存分配给char *subs
时,它是在堆上分配的,并且它指向由malloc
分配的内存块,即使您的函数substr
终止。但在调用函数时需要free
这个内存。
关于c - 函数返回错误值是标记返回值是“char *” ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33718592/
10-12 15:04