char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
这个程序,运行Tesxt()函数,结果是乱码,答案解释如下:
因为 GetMemory 返回的是指向“栈内存”
的指针,该指针的地址不是 NULL,但其原
先的内容已经被清除,新内容不可知。
可是我把GetMemory函数中的char p[]="hello world"改成char *p="hello world"; 就可以正常输出hello world 了。
我的问题是,子函数中定义的数组的生存期跟子函数的生存期相等,那子函数中定义的指针的生存期呢,是否也和子函数的生存期相等?
帮我解决了问题我加分给大家!
关于C语言字符串数组和字符指针相互赋值问题
首先:char filename[50]="C:\\\\RequestData";这句涉及到指针强转,会将filename指向"C:\\\\RequestData"所在的地址,在对filename进行操作时就有可能崩溃。其次:char * fileArray[56];是指针数组,存储了56个char *型指针,而你这样儿fileArray[i] = filename;进行赋值是指针赋值,故fileArray中...
字符串数组与字符指针的区别
C语言有两种表示字符串的方法,一种是字符数组,另一种是字符串常量,它们在内存中的存储位置不同,使得字符数组可以读取和修改,而字符串常量只能读取不能修改。三、存取效率 char *a = “abcd”; 存于静态存储区。在栈上的数组比指针所指向字符串快,因此慢。而char a[20] = “abcd”; 存于...
一个C语言中指针型字符数组的问题
char *p=“AAA”; \/\/初始化一个指向字符串的指针(指向字符串其实是指向字符串的第一个字符)注意,上面说的是指向字符串常量!p[0]='B'; \/\/不允许 这会导致内存访问错误。原因在于编译器可能选择内存中的同一个单个的拷贝,来表示所有相同的字符串文字。给你举个例子:char message1[] = ...
关于C语言的字符串指针的问题?
如果输入12345,那么p指向1,即p中存放着1的地址。没有字符串的指针和指针指向的内容不能修改一说。无论什么类型的指针,只要是“常指针”就有三种情况不可改变:指针是常量——这个指针只能指向申明时指向的目标,不能指向别处。指向的内容是常量——不能通过这个指针改变指向的内容,但指针可以指向别处...
关于字符串和指针的问题
A错。s是数组,p是指针,虽然在使用上没差别,但毕竟是两个不同类型。B错。p中的内容是s的首地址,而s中的内容指的是china这个字符串。D错。s的长度是算上了字符串结束符,是6。p指向的字符串长度是5,不包括结束符 28。C A错。str本身就是地址了,不用加& B错。p未初始化 D错。p[2]...
C语言字符指针问题
printf("%c", *p); \/\/ 结果是hprintf("%c" , *(p+1)) \/\/ 结果是e最后是函数引用问题。这里是否能引用p,是需要看你的函数是怎么写的。比如说你说strcmp。他的原型为 extern int strcmp(const char *s1,const char *s2);他两个参数均为指针,当然可以直接使用p这个指针作为参数 ...
解惑丨C语言字符串常量、字符数组、字符指针!
字符指针与字符数组类似,都是指向字符的指针。例如,声明一个字符指针`const char* b = "321";`,表示`b`是一个指向字符串常量`"321\\0"`的指针。由于`b`是一个指针,它存储的是字符串常量的地址,而非内容。在C语言中,`const`关键字用于声明指针指向的是常量,即指针所指向的内存内容不可...
字符指针变量和字符数组的区别
字符(非字符串数组,字符数组和字符串数组是有区别的,字符串数组每个元素都是一个字符串)数组是用来存放字符的数组,在内存中占一段连续的单元。所占内存存放的是字符串。定义方法为:char a[N];N为常量表达式,可初始化。字符指针是指向字符的指针,所占内存单元存放的是所指字符的内存单元。定义...
C语言指针、字符串、取反问题
1、第一题的答案纯属误导,坚持你的意见就行 2、char a[7]="a0\\0a0\\0";这个你要注意,strlen碰到'\\0'后就会以为串已经结束,并返回,所以碰到第一个\\0时就返回长度2了 至于那个空格,应该没有吧,我在vc里面直接就编译不过去 3、只要你单引号里面能表示为一个字符就行,而数字,看起来是...
C语言中字符指针的问题 char *pointer = "Hello World!"; printf...
回答:这里的 pointer 指向的是一个字符串,字符串的首地址赋给 pointer printf("%s\\n",pointer); \/\/输出Hello World!\/\/ printf 遇到指向字符串的指 \/\/针时,输出字符串(就是这样定义的) printf("%s\\n",*pointer); \/\/输出H printf("%d\\n",pointer); \/\/输出pointer指向的地址