• C风格字符串


    以空字符null结束的字符数组:

    char ca1[] = {'C','+','+'};        //no null,not C-style string

    char ca2[] = {'C','+','+','\0'};      //explicit null

    char ca3[] = {'C','+','+'};        //null terminator added automatically

    const char *cp = "C++";        //null terminator added automatically

    char *cp1 = ca1;            //points to first element of a array,but not C-style string

    char *cp2 = ca2;            //points to first element of a null-terminated char array

    ca1和cp1都不是C风格字符串:ca1是一个不带结束符null的字符数组,而指针cp1指向ca1,因此,它指向的并不是以null结束的数组。其他的声明则都是C风格字符串,数组的名字即是指向该数组第一个元素的指针。

    1、C风格字符串的使用

    C++通过(const)char *类型的指针来操纵C风格字符串

    const char *p = "some value";

    while(*cp){

    //do something to *cp

    ++cp;

    }

    如果cp所指向的字符数组没有null结束符,则此循环将会失败。这时,循环会从cp指向的位置开始读数,直到遇到内存中某处null结束符为止。

    2、C风格字符串的标准库函数

    for C:

    #include<string.h>

    for C++:

    #include<cstring>

    strlen(s);

    strcmp(s1,s2);

    strcat(s1,s2);

    strcpy(s1,s2);

    strncat(s1,s2,n);

    strncpy(s1,s2,n);

    这些标准库函数不会检查其字符串参数。传递给这些标准库函数例程的指针必须具有非零值,并且指向以null结束的字符数组中的第一个元素。一些标准库函数会修改传递给他的字符串,这些函数假定它们所修改的字符串具有足够大的空间接收本函数新生成的字符,程序员必须确保目标字符串必须足够大。

    字符串值真的比较是比较指针上存放的地址值

    if(cp1 < cp2)  //compare addresses,not the values pointed to

    如果cp1和cp2指向同一数组中的元素(活该数组的溢出位置),上述表达式等效于比较cp1和cp2中存放的地址;如果这两个指针指向不同的数组,则该表达式实现的比较没有定义。

  • 相关阅读:
    java 的异常和错误,有哪些
    java里的15种锁
    Netty知识点总结(一)——NIO
    Java中的路径问题
    Java定时任务-Timer
    安装Idea后需要做的3件事
    线程中的队列(queue)
    信号量(Semaphore)
    python线程的同步事件Event
    python中的GIL
  • 原文地址:https://www.cnblogs.com/BeyondTechnology/p/1838058.html
Copyright © 2020-2023  润新知