1 字符数组概述

C语言中没有字符串这种数据类型,可以通过char的数组来替代。数字0(和字符 ‘\0’ 等价)结尾的char数组就是一个字符串,字符串是一种特殊的char的数组。

大话C语言:第22篇 字符数组插图

#include 

int main() 
{
    char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
    printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'
#include 
int main() 
{
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'\0'结束符
// 以'\0'('\0'就是数字0)结尾的字符数组是字符串
char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s
", c2);
// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s
", c3);
// 使用字符串初始化,编译器自动在后面补0,常用
char c4[] = "c prog";
printf("c4 = %s
", c4);
return 0;
}
'结束符 // 以'
#include 
int main() 
{
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'\0'结束符
// 以'\0'('\0'就是数字0)结尾的字符数组是字符串
char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s
", c2);
// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s
", c3);
// 使用字符串初始化,编译器自动在后面补0,常用
char c4[] = "c prog";
printf("c4 = %s
", c4);
return 0;
}
'('
#include 
int main() 
{
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'\0'结束符
// 以'\0'('\0'就是数字0)结尾的字符数组是字符串
char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s
", c2);
// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s
", c3);
// 使用字符串初始化,编译器自动在后面补0,常用
char c4[] = "c prog";
printf("c4 = %s
", c4);
return 0;
}
'就是数字0)结尾的字符数组是字符串 char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '
#include 
int main() 
{
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'\0'结束符
// 以'\0'('\0'就是数字0)结尾的字符数组是字符串
char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s
", c2);
// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s
", c3);
// 使用字符串初始化,编译器自动在后面补0,常用
char c4[] = "c prog";
printf("c4 = %s
", c4);
return 0;
}
'}; printf("c2 = %s ", c2); // 字符串处理以'
#include 
int main() 
{
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'\0'结束符
// 以'\0'('\0'就是数字0)结尾的字符数组是字符串
char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s
", c2);
// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s
", c3);
// 使用字符串初始化,编译器自动在后面补0,常用
char c4[] = "c prog";
printf("c4 = %s
", c4);
return 0;
}
'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出 char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '
#include 
int main() 
{
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'\0'结束符
// 以'\0'('\0'就是数字0)结尾的字符数组是字符串
char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s
", c2);
// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s
", c3);
// 使用字符串初始化,编译器自动在后面补0,常用
char c4[] = "c prog";
printf("c4 = %s
", c4);
return 0;
}
', 'h', 'l', 'l', 'e', 'o', '
#include 
int main() 
{
char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组
printf("c1 = %s
", c1);                    // 有可能乱码,因为没有'\0'结束符
// 以'\0'('\0'就是数字0)结尾的字符数组是字符串
char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s
", c2);
// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s
", c3);
// 使用字符串初始化,编译器自动在后面补0,常用
char c4[] = "c prog";
printf("c4 = %s
", c4);
return 0;
}
'}; printf("c3 = %s ", c3); // 使用字符串初始化,编译器自动在后面补0,常用 char c4[] = "c prog"; printf("c4 = %s ", c4); return 0; }

注意,如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组。

2 字符数组初始化

  • 直接初始化

char str[] = "Hello, World!";
char str[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '
char str[] = "Hello, World!";
char str[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
'};
  • memset函数

// memset函数放在string.h文件
// void *memset(void *s, int ch, size_t n);
char str[256];
memset(str, 0, 256);

3 字符串的输入输出

由于字符串采用了’\0’标志,字符串的输入输出将变得简单方便。

字符串的输入方法:

// 通过格式控制符%s输入字符串。除了字符串,scanf() 还能输入其他类型的数据。
char str[128];
scanf("%s", str)

// 直接输入字符串,并且只能输入字符串。
char str[128];
gets(str);

注意,scanf() 和 gets() 是有区别的:

  • scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。

  • gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。换句话说,gets() 用来读取一整行字符串。

#include 
int main()
{
    char str1[30] = {0};
    char str2[30] = {0};
    char str3[30] = {0};
    //gets() 用法
    printf("Input a string: ");
    // 输入字符串str1带空格
    gets(str1);
    
    //scanf() 用法
    printf("Input a string: ");
    // 输入字符串str2不带空格
    scanf("%s", str2);
    // 输入字符串str3带空格
    scanf("%s", str3);
   
    printf("
str1: %s
", str1);
    printf("str2: %s
", str2);
    printf("str3: %s
", str3);
    return 0;
}

字符串的输出方法:

// 输出字符串并自动换行,该函数只能输出字符串
char str[128];
puts(str);

// 通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据
char str[128];
printf(str);

例如,

#include 

int main()
{
    char website[] = "www.whccf.cn";
    printf("%s
", website);
    puts(website);
    
    return 0;
}
本站无任何商业行为
个人在线分享 » 大话C语言:第22篇 字符数组
E-->