作者UNARYvvv (有趣生活)
看板C_Sharp
标题Re: [问题] C#使用C++ dll之回传char
时间Wed Nov 14 19:06:05 2007
※ 引述《luse (luse)》之铭言:
: ※ 引述《cole945 (躂躂..)》之铭言:
: : 这个写法就算在 C/C++ 都是错的呀 @_@
: : 你的 return type 是 char*, 可是你却 return char
: : 就算你是要 return testStr 的字串好了 (即 testStr),
: : 可是该字串的内容是配置在 test 的 call stack中, 一但 return 就不该使用
: 这个例子 testStr 会被分配在STack上 可是 字串常数 "Hello World"不会
: return testStr 不是一个很好的写法 but work well
那是错误写法而且也不 work well
注意他是写 char testStr[]="Hello World!";
所以他 return testStr; 时,就是回传放在 stack 上字串的起始位址
而不是字串常数 "Hello World" 在 constant pool 中的位址
离开 function 後再去参考先前 stack 上字串的内容,就会得到未知内容
你说的情况是在宣告 (const) char *testStr="Hello World!"; 的时候
这样子 testStr 变数实际在 stack 上就只有配置一个 char*
占用大小为 sizeof char* 而不是一整个字串内容
此时 return testStr; 就是回传 constant pool 中那个字串的起始位址了
这样才 ok
所以 cole945 说的没错
ps. 这个例子恰好是 C 语言指标与阵列的差异
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.53.123
※ 编辑: UNARYvvv 来自: 140.115.53.123 (11/14 19:08)