This question already has answers here:
Closed 3 years ago.
Returning a pointer to an automatic variable
(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