用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