用C
动态和静态变量
变量声明可以是外部的所有功能或函数内的所有功能外 声明是全局的,在固定的存储位置 静态声明声明的功能之外的变量是一个“文件全局”(不能由其他源代码中引用科幻) 块语句{}中的声明(嵌套在函数体中的函数体或块语句): 动态分配,除非声明为静态 程序执行进入块时分配内存 执行退出块时释放内存 如果一个函数调用自身(直接或间接),它得到了一组新 这是从任何其他呼叫处理,没有不同的功能
你有问题,变量result[]
动态变量(称为堆栈帧)是一个已经分配在函数中的变量 - 它的生命周期贯穿函数的整个运行(在堆栈中分配!),因为你需要做的result
动态可变
修复代码:
#include <stdio.h>
#include <string.h>
char* substr(char *source, int start, int length)
{
char* result;
char *r;
result=(char*)malloc(sizeof(char)*10);
r = result;
strncpy(result, source+start, length);
printf("substr: %s\n", r);
return r;
}
int main()
{
char* r=substr("HELLO", 1, 2);
printf("main: %s\n",r);
free(r)//Don't forget to free it!
}
也可以使result[]
全局变量像这样:
#include <stdio.h>
#include <string.h>
char result[10];//<======Global
char* substr(char *source, int start, int length)
{
char *r=result;
r = result;
strncpy(result, source+start, length);
printf("substr: %s\n", r);
return r;
}
int main()
{
printf("main: %s\n",substr("HELLO", 1, 2));
}
可能的重复[返回的字符串值变成垃圾](http://stackoverflow.com/questions/15020105/returned-string-value-becomes-garbage) – alk 2013-02-25 05:58:27