c语言学习-字符串部分小错误汇总

  1. scanf(),gets(),fgets(),getchar()的区别以及应用场合
    scanf()函数再输入字符串时,遇到“空格、回车换行、制表”会终止读入
    gets()函数读取一整行,直到遇到换行符,并且不会存储换行符
    fgets()函数读取一整行输入,或者在大于某个值时停止读入,会存储第一个换行符
    getchar()函数可以读取任何一个字符。

在使用fgets()函数时,特别注意因为它限制读入字符个数,所以读入存储的位置应是一个已知大小的字符数组,而不能是字符指针。
2. 指针之间的传递是值传递,例如在函数中利用指针接受数组的地址,计算机内部是新建一个指针同样指向调用函数中的数组的内容,所以利用此指针可以改变原数组的内容,但是指针自增并不会使原函数中数组的地址也同样改变,因为数组名地址和指针地址不是同一个。

char* test(char*);
int main()
{
    char* ptr = "dsjhjfg";
    char* p = NULL;
    p = test(ptr);
    puts(ptr);
    puts(p);
 }
 char* test(char* newptr){
       newptr++;
       *newptr = 'r';
       return newptr;
 }

在上述程序中,因为指针是值传递,因此在test()函数中,计算机新生成一个指针:newptr也指向原函数中ptr指针指向的内容:“dsjhfg";所以可以在test函数中修改字符串的值。
但是指针是值传递,因此在test函数中修改了newptr的值是不会改变原函数中ptr指针的值(注意是指针的值,不是指针指向的值)。
而此时p指针接受的是newptr指针的值,也就是,原字符串首地址加1的位置。
所以上述程序输出: drjhjfg rjhjfg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值