zoukankan      html  css  js  c++  java
  • 《c程序设计语言》读书笔记-5.3-指针实现strcat

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <curses.h>
    
    void strcat_(char *s,char *t)
    {
        while(*s)
            s++;
        while((*s++ = *t++))
            ;
    }
    
    int main()
    {
        char c[] = "I love you!";            //char *c = "I love you!";;
        char p[] = "You are a good man!";    //*p = "You are a good man!" ;
    
        strcat_(c,p);
    
        return 0;
    
    }

    这个程序有一个注意的地方,char *p 这样定义是不行的,因为指针定义的字符串不可修改;而如果用数组 p[ ] 定义数组,则可以修改。


    百度知道网友给我的回答:

    传递的都是字符串的首地址,但是字符串内容却不同:
    char* c = "I love you!"这里定义的指针c指向的是一个常量字符串"I love you!" ,p也一样
    char c[] = “I love you!";这里的c是一个字符数组,以''结尾。p也一样
     
    所谓常量字符串,就是说字符串的内容是不能改变的,你再调用strcat_函数,其实就是把p的内容连接到c字符串的后面,改变字符串c,若c是常量,显然会语法错误。而c[]定义的是个字符数组,不是常量,可修改的。到这里疑问已经解答了。
     
    另外,char c[] = “I love you!";这种定义字符串变量的方法,[]里面没写字符数组大小,但是实际开的空间大小是后面字符串的长度+1,你要想再在c后面连接字符串,实际上空间是不够的。所以也肯定会报错,越界访问了。
     
    所以正确的做法是定义char c[1000] = “I love you!";里面的大小1000只要能确保能容纳待连接的字符串长度就行。
  • 相关阅读:
    jvm性能调优---jstat的用法
    flume-ng+Kafka+Storm+HDFS 实时系统搭建
    proxool
    Shell实现跳板机,为什么用跳板机
    JUC回顾之-ThreadPoolExecutor的原理和使用
    java集合之ArrayList的实现原理
    JMeter性能测试介绍学习一
    基础知识《十三》深入浅出Java回调机制
    怎样将myeclipse里默认编码设置成utf-8
    《转》怎样看待比自己强的人
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020452.html
Copyright © 2011-2022 走看看