读书人

关于printf(quot;%s\nquot;p1)p1替char *类型

发布时间: 2012-09-11 10:49:03 作者: rapoo

关于printf("%s\n",p1),p1为char *类型

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);    return 0;}

printf("%s\n",p1); //这里怎么出不来

[解决办法]
C/C++ code
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; //temp是临时变量,函数退出以后就析构了。后面printf使用的p1内容是不可以预知的    return p1;}
[解决办法]
函数my返回了局部变量的指针

而指针所指内容在my返回后已被销毁

可设置断点看下p1所指内容
[解决办法]
探讨
C/C++ code
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; //temp是临时变量……

读书人网 >C语言

热点推荐