美文网首页程序员
C指针(7):字符串

C指针(7):字符串

作者: miamendax | 来源:发表于2020-06-01 12:09 被阅读0次

字符串

1.字符串声明

  • 字面量

    定义字面量时通常将其分配在字面量池中, 通常只有一个副本. 关闭字面量池, 可以生成多个副本

//通常将字面量看作常量,不做修改
char *tabHeader = "Media Player";
  • 数组

    char header[] = "Media Player";
    
  • 指针

    char *header = (char*) malloc(strlen("Media Player")+1);
    strcpy(header,"Media Player");
    //使用malloc函数的注意事项:
    //1. 一定要加上结束符NUL,即'/0'
    //2. 不要用sizeof操作符,而是用strlen函数来确定已有字符串的长度。sizeof操作符会返回数组和指针的长度,而不是字符串的长度
    
char *prefix = '+';//不合法
//字面量是int类型,这其实是在尝试把整数赋值给字符指针

2.字符操作

  • strcmp函数

    //函数原型
    int strcmp(const char *s1, const char *s2);
    
    //按字典序,s1 < s2,返回负数;s1 = s2,返回0;s1 > s2,返回正数
    
    //字符串比较不正确的做法
    //1. 赋值符号=
    char command[16];
    printf("Enter a Command: ");
    scanf("%s",command);
    if(command = "Quit") {
        //将字面量地址赋值给数组
    }
    
    //2. 相等操作符==
    if(command == "Quit") {
        //比较的是地址
    }
    
  • strcpy函数

    //函数原型
    char* strcpy(char *s1, const char *s2);
    
    //一类常见的应用程序会读入一系列字符串,挨个存入占据最少内存的数组
    char name[32];//用于读入字符串
    char *names[30];
    size_t count = 0;
    
    printf("Enter a name: ");
    scanf("%s",name);
    names[count] = (char*)malloc(strlen(name)+1);//动态分配内存给每个字符串
    strcpy(names[count],name);
    count++;
    
  • strcat函数

    //函数原型
    char *strcat(char *s1, const char *s2);
    
    //一定要专门为拼接字符串分配内存,防止发生内存泄漏
    char* error = "ERROR: ";
    char* errorMessage = "Not enough memory";
    char* buffer = (char*)malloc(strlen(error)+strlen(errorMessage)+1);
    strcpy(buffer,error);
    strcat(buffer, errorMessage)
    
    //不正确的拼接
    char error[]="ERROR:"; 
    char errorMessage[]="Not enough memory";
    strcat(error,errorMessage);//不合法,覆写栈帧的一部分
    

error = strcat(error,errorMessage);//不合法,将指针赋值给数组名字

//字符字面量和字符串字面量
char* path="C:";
char* currentPath=(char*)malloc(strlen(path)+2);
currentPath=strcat(currentPath,"\\");//转义字符,拼接了一个反斜杠
currentPath=strcat(currentPath,'\\');//int整数转化为char类型变量的地址
```

3.传递在函数中初始化的字符串

//传递一个空缓存区让函数填充并返回
char* format(char *buffer, size_t size,        
             const char* name, size_t quantity, size_t weight) {
    snprintf(buffer, size, "Item: %s Quantity: %u Weight: %u", 
             name, quantity, weight);
    return buffer;
}

//函数动态分配缓存区
char* format(char *buffer, size_t size,
             const char* name, size_t quantity, size_t weight) {
    char *formatString = "Item: %s Quantity: %u Weight: %u"; 
    size_t formatStringLength = strlen(formatString)-6;
    size_t nameLength = strlen(name);
    size_t length = formatStringLength + nameLength +
        10 + 10 + 1;  
    
    if(buffer == NULL) {
        buffer = (char*)malloc(length);
        size = length;
    }    
    
    snprintf(buffer, size, formatString, name, quantity, weight);
    return buffer;
}

4.给应用程序传递参数

//对基于命令行的程序来说,通过为其传递信息来打开某种行为的开关或控制某种行为很常见
//C用传统的argc和argv参数支持命令行参数。
//第一个参数argc,是一个指定传递的参数数量的整数。系统至少会传递一个参数,这个参数是可执行文件的名字。
//第二个参数argv,通常被看做字符串指针的一维数组,每个指针引用一个命令行参数

int main(int argc, char** argv) {
    for(int i=0; i<argc; i++) {
        printf("argv[%d] %s\n",i,argv[i]);
    }
    ...
}
//下列命令执行程序
process.exe -f names.txt limit=12 -verbose
//输出
argv[0] c:/process.exe
argv[1] -f
argv[2] names.txt
argv[3] limit=12
argv[4] -verbose

相关文章

  • C指针(7):字符串

    字符串 1.字符串声明 字面量定义字面量时通常将其分配在字面量池中, 通常只有一个副本. 关闭字面量池, 可以生成...

  • 再学C语言之指针要点

    C之字符数组 C之指针引用字符串 C语言之数组指针 数组指针:首先它是一个指针,它指向数组指针数组:首先它是一个数...

  • [C]C语言指针

    Blog C语言指针详解 C语言字符串操作 指针的作用 指针是程序数据在内存中的地址,指针变量是用来保存这些地址的...

  • 慕课网-Linux C语言指针与内存-学习笔记

    Linux C语言指针与内存 工具与原理 指针 数组 字符串 堆内存与栈内存 gdb内存调试工具。 C语言中指针的...

  • 指针与数组

    基础 方法一:用字符数组定义字符串,用指针访问。 方法二:用指针定义字符串,用数组下标访问。 C语言没有定义字符串...

  • 基础语法总结

    1.c++ .c/.mm 2013 OC第三 2.c语言字符串,使用字符数组构成,或者指针,清空指针NULL, 0...

  • C语言学习10.字符串和相关函数

    C语言中,没有string类型,有三种表现形式:字面值常量,字符串数组,字符串指针。字符串指针变量:指向字符串的头...

  • strlen, sizeof(), length的区别

    strlen C,C++语言中的函数,用于计算当前指针变量 const char * (字符串)的字符串长度,以\...

  • C语言18 指针与字符串

    C语言18 指针与字符串 字符串的几种表示方式有什么区别? 常用的字符串函数 指针函数 本质就是函数,只不过函数的...

  • c++读书笔记

    c++有很多有意思的小点,今天来记录下这些点 字符串 变量声明 指针 1、字符串 c++中有两类字符串: c风格字...

网友评论

    本文标题:C指针(7):字符串

    本文链接:https://www.haomeiwen.com/subject/vavjzhtx.html