zoukankan      html  css  js  c++  java
  • 读《C程序设计语言》笔记5

    字符串常量:

      字符串常量也叫字符串字面值,是用双引号括起来的0个或多个字符组成的字符序列。双引号不是字符串的一部分,它只用于限定字符串。

      从技术角度看,字符串常量就是字符数组。字符串的内部表示使用一个空字符'\0'作为串的结尾,因此,存储字符串的物理存储单元比括在双引号中的字符数多一个。这种表示方法也说明,C语言对字符串的长度没有限制,但程序必须扫描完整个字符串后才能确定字符串的长度。

      标准库函数strlen(s)可以返回字符串参数s的长度,但长度不包括末尾的'\0'。

      下面给出strlen()的两个版本:

    1 int strlen(char s[])
    2 {
    3 int n;
    4 n=0;
    5 while(s[n]!='\0')
    6 {
    7 ++n;
    8 }
    9 return n;
    10 }

      为什么代码不会自动排版了....无语

    1 int strlen(char *s)
    2 {
    3 char *p=s;
    4 while(*p!='\0')
    5 {
    6 p++;
    7 }
    8 return p-s;
    9 }

      标准头文件:<string.h>中声明了strlen和其他字符串函数

      该头文件中含有这样一段代码:

    #ifndef RC_INVOKED

    #ifdef __cplusplus
    extern "C" {
    #endif

    /*
    * Prototypes of the ANSI Standard C library string functions.
    */
    _CRTIMP
    void* __cdecl memchr (const void*, int, size_t) __MINGW_ATTRIB_PURE;
    _CRTIMP
    int __cdecl memcmp (const void*, const void*, size_t) __MINGW_ATTRIB_PURE;
    _CRTIMP
    void* __cdecl memcpy (void*, const void*, size_t);
    _CRTIMP
    void* __cdecl memmove (void*, const void*, size_t);
    _CRTIMP
    void* __cdecl memset (void*, int, size_t);
    _CRTIMP
    char* __cdecl strcat (char*, const char*);
    _CRTIMP
    char* __cdecl strchr (const char*, int) __MINGW_ATTRIB_PURE;
    _CRTIMP
    int __cdecl strcmp (const char*, const char*) __MINGW_ATTRIB_PURE;
    _CRTIMP
    int __cdecl strcoll (const char*, const char*); /* Compare using locale */
    _CRTIMP
    char* __cdecl strcpy (char*, const char*);
    _CRTIMP size_t __cdecl strcspn (
    const char*, const char*) __MINGW_ATTRIB_PURE;
    _CRTIMP
    char* __cdecl strerror (int); /* NOTE: NOT an old name wrapper. */

    _CRTIMP size_t __cdecl strlen (
    const char*) __MINGW_ATTRIB_PURE;
    ...
    }

      其中extern "C"的作用是:

      为了方便C++编译器兼容C程序,因为有些函数是用c编译器编译出来的,如果想让这些函数能在c++程序中使用,则需要告诉c++编译器。使用extern"c"就是这个目的,只要使用到c源文件中的函数、变量等,都要用extern"c"告知。

  • 相关阅读:
    Unity shader with lightmap
    清理数据库日志
    Sqlserver数据库还原一直显示“正在还原…”解决方法
    如何查看 SQL Server 执行的历史 SQL 语句记录?
    MYSQL 命令行大全 (简洁、明了、全面)
    C#Datatable导入sqlserver数据库中,三种常见,快捷的方法
    MongoDB下载页面
    等级保护和分级保护区别与联系
    等级保护和分级保护
    SQL2005EXPress自动备份
  • 原文地址:https://www.cnblogs.com/wangzhiyu811/p/2104450.html
Copyright © 2011-2022 走看看