如何调用函数进行数组赋值
今天写程序,偶然发现这个情况,虽然理解了指向问题,但解决不了赋值问题,该怎么弄?代码如下#include <stdio.h>
void get (char * p);
void main()
{
char ch;
get(ch);
puts(ch);
}
void get(char * p)
{
p = "abcd";
} 本帖最后由 代码农民 于 2017-1-3 17:28 编辑
我的理解是你在第二个函数里是想用缓存ch的首地址直接指向字符串?
如果是这样:因为P是个临时的变量,在函数调用完p就没了(p是个中间量),而且ch的首地址是不会变的,因为它是一个常量..
对于数组的赋值,有两种方法,一种是在声明的时候初始化赋值,如char a[]=" abcd ";另一种只能对元素一个一个的赋值,for(i = 0; i < N; ++i) a[ I ] =....
第二个函数可以这样改写:
void
get (char * p)
{
char* s = "abcd"; //你想赋的值
char* s1 ; //我们的变量工具
for(s1 = s; *s1 != '\0'; ++s1) //while( *p++ = *s1++ != '\0' );
*p++ = *s1; //一个语句顶3句
*p = '\0'; //要确宝数组空间够用
}
其实strcpy就是这样实现的:
原型 strcpy(目标数组首地址的副本, 你要赋的字符串);
本帖最后由 lzgw 于 2017-1-3 18:57 编辑
代码农民 发表于 2017-1-3 17:01
我的理解是你在第二个函数里是想用缓存ch的首地址直接指向字符串?
如果是这样:因为P是个临时的变量 ...
你写的代码我明白,等于还是一个字符一个字符的放入p指向的地址里。
虽然p = “abcd” 不行,但是scanf(“%s”,p)却是可以的,strcpy(p, "abcd"); 这样也可以, 这是为什么呢?
字符串不能直接赋值,只能拷贝??
p= “abcd” 是改变指针的指向,而不是把字符串放入指针指向的地址中。
scanf(“%s”,p),strcpy(p, "abcd") 而这样却是把字符放入指针指向的地址中。
有没有什么方法能把“abcd”的地址放入指针指向的地址里呢? 本帖最后由 代码农民 于 2017-1-3 19:36 编辑
lzgw 发表于 2017-1-3 18:51
还不是很明白,虽然p = “abcd” 不行,但是scanf(“%s”,p)却是可以的,strcpy(p, "abcd"); 这样也可 ...
调用scanf和strcpy会使字符串复制到p指向的内存空间。你想想,你要复制一个东西,总得有个空间容纳它吧....
对于scanf(“%s”,p)和strcpy(p, "abcd")来说,p是数组的首地址,也就是说在调用这两个函数之前必须确宝有个数组(安全的内存空间即缓冲区)能容纳你要复制的字符。
比如:char a;
char *p = a; //p和数组的首地址相等
然后才可以调用scanf(“%s”,p)和strcpy(p, "abcd"),字符会被复制到p指向的数组里
如果没有设置缓冲区,即只有char *p; p的指向的空间是不确定的(比如可能指向有用的数据),调用函数会破坏它们....
不知道我说的你能不能理解...不理解可以再问我..真不行就加好友语音
补冲:
对于scanf(“%s”,p);其实函数原型里肯定做了不少工作,它也肯定不是整体赋值的,只是咱们看不见.函数到底作了些什么..
代码农民 发表于 2017-1-3 19:12
调用scanf和strcpy会使字符串复制到p指向的内存空间。你想想,你要复制一个东西,总得有个空间容纳它吧 ...
感谢答复,我再研究研究。 lzgw 发表于 2017-1-3 20:38
感谢答复,我再研究研究。
Q:690549170
反正我也闲着没事... 代码农民 发表于 2017-1-3 19:12
调用scanf和strcpy会使字符串复制到p指向的内存空间。你想想,你要复制一个东西,总得有个空间容纳它吧 ...
级别太低,加不了好友,加微信可以不,我微信号14907583
lzgw 发表于 2017-1-3 20:49
级别太低,加不了好友,加微信可以不,我微信号14907583
我加你吧,给个Q号,因为我不太会微信.... 本帖最后由 fc1735 于 2017-1-15 22:32 编辑
可以用sprintf 函数解决
void get(char* p)
{
sprintf(p,"%s","abcd");
} 代码农民 发表于 2017-1-3 17:01
我的理解是你在第二个函数里是想用缓存ch的首地址直接指向字符串?
如果是这样:因为P是个临时的变量 ...
解释的好!学习了
页:
[1]