我想输出子函数里面的a数组,这段代码为什么不行呢?
#include<stdio.h>
#include<string.h>
char *fun()
{
char a[] = {'1','2'};
return a;
}
int main()
{
char *b;
b = fun();
printf("%s", b );
}
char *fun()
{
static char a[] = {'1','2'};
return a;
}
函数部分改成这样就可以了
你错误的原因是:
你让函数返回了一个指针让b指向它是不假,
但是 这个函数中返回的指针a是一个局部变量, 返回之后, 指针a就会被释放掉, a数组的内容也不存在了
那么此时 b指向了哪里呢 指向的目标a数组已经消失了
指向了被撤销的内存地址 而这个地址上的内容已经没了
此时你再打印b的内容当然打不出来
你这个问题应该是栈内存跟堆内存的区别,如果指针指向函数的局部变量(存储在栈内)返回值时,当函数执行完了就会释放掉栈内存数据,最后你的指针指向了被释放的内存块,里面的数据是垃圾数据。
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
char *fun()
{
// char a[] = {'1','2'};
char *a = (char *)malloc(3*sizeof(char));
memset(a,0x0,3);
a[0] = '1';
a[1] = '2';
return a;
}
int main()
{
char *b;
b = fun();
printf("%s", b );
}
如果不对,欢迎指正
#include<stdio.h>
#include<string.h>
char fun(char* b)
{
char a[] = {'1','2'};
strcpy(b, a);
}
int main()
{
char b;
fun(&b);
printf("%s", &b );
}
望采纳,谢谢