return 返回指针有关问题
return 返回指针问题C/C++ code#include stdio.h#include string.hchar *my(char *f1, int n){int len
return 返回指针问题
C/C++ code#include <stdio.h>#include <string.h>char *my(char *f1, int n){ int len=strlen(f1); char temp[15]; char *p1; strcpy(temp,f1+len-n); strcpy(temp+n,f1); temp[len]='\0'; p1=temp; return p1;}int main(){ char *p="5466565655"; char *p1; p1=my(p,3);---------------------- printf("%s\n",p1); -------------这样就不能输出?---------------------- for(。。。。) { printf("%c",*p);----------这样可以输出? }----------------------- return 0;}
谁解释上面两种情况的具体。。O(∩_∩)O谢谢
[解决办法]看这一段代码
char* x(void)
{
char* p="123456";
return p;
}
void main()
{
char *pi=x();
int x=pi;
printf("%s",x);
}
汇编代码如下
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08
TITLEE:\vc2008\t.c
.686P
.XMM
include listing.inc
.modelflat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
_DATASEGMENT
$SG733DB'123456', 00H
_DATAENDS
PUBLIC_x
; Function compile flags: /Odtp
_TEXTSEGMENT
_p$ = -4; size = 4
_xPROC
; File e:\vc2008\t.c
; Line 2
pushebp
movebp, esp
pushecx
; Line 3
movDWORD PTR _p$[ebp], OFFSET $SG733
; Line 4
moveax, DWORD PTR _p$[ebp]
; Line 5
movesp, ebp
popebp
ret0
_xENDP
_TEXTENDS
PUBLIC_main
; Function compile flags: /Odtp
_TEXTSEGMENT
_pi$ = -4; size = 4
_mainPROC
; Line 7
pushebp
movebp, esp
pushecx
; Line 8
call_x
movDWORD PTR _pi$[ebp], eax
; Line 9
xoreax, eax
movesp, ebp
popebp
ret0
_mainENDP
_TEXTENDS
END
可以看出x函数退出后将常量字符串123456的地址以返回值DWORD PTR _p$[ebp]
存入eax后退出
然后我们看到通过eax仍然可以得到完整的字符值 但是由于eax是char指针 所以只能从常量区取到一个char类型值 即一个字母
那么通过指针类型转换能不能得到完整的值呢 看以下代码
char* x(void)
{
char* p="123456";
return p;
}
void main()
{
char *pi=x();
printf("%s",(int)pi);
}
完整的输出了字符串值 因此答案已经很明了了