【发布时间】:2015-11-15 10:18:39
【问题描述】:
这是我的代码,当我返回 "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);
};
【问题讨论】:
-
subs是一个自动变量。当函数退出并返回这样的变量是未定义行为时,它会超出范围。您的主要选择是将缓冲区传递给substr函数,或者让substr函数分配动态内存并将其返回给调用者。
标签: c