C 语言字符串

C 语言字符串

在本教程中,您将学习C语言编程中的字符串。您将在示例的帮助下学习声明它们,对其进行初始化以及将它们用于各种 I / O(输入/输出)操作。

在C语言编程中,字符串是以null字符\0结束的字符序列。例如:

c 复制代码
char c[] = "c string";

当编译器遇到用双引号引起来的字符序列\0时,默认情况下会在末尾附加一个空字符。

如何声明一个字符串?

声明字符串的方法如下:

c 复制代码
char s[5];

在这里,我们声明了一个5个字符的字符串。

如何初始化字符串?

您可以通过多种方式初始化字符串。

c 复制代码
char c[] = "abcd";

char c[50] = "abcd";

char c[] = {'a', 'b', 'c', 'd', '\0'};

char c[5] = {'a', 'b', 'c', 'd', '\0'};

让我们再举一个实例:

c 复制代码
char c[5] = "abcde";

在这里,我们尝试将6个字符(最后一个字符是'\0')分配给char具有5个字符的数组。这是错误的做法,您永远不要这样做。

给字符串赋值

C语言中数组和字符串一旦声明,它们就不支持赋值运算符。

c 复制代码
char c[100];
c = "C programming";  // 错误! 数组类型不可分配。

**注意:**使用strcpy()函数代替复制字符串。

从用户处读取字符串

可以使用scanf()函数读取字符串。

scanf()函数读取字符序列,直到遇到空格(空格,换行符,制表符等)。

示例1:scanf读取字符串

c 复制代码
#include <stdio.h>
int main()
{
    char name[20];
    printf("输入姓名: ");
    scanf("%s", name);
    printf("你的名字是 %s.", name);
    return 0;
}

输出结果

c 复制代码
输入姓名: Dennis Ritchie
你的名字是 Dennis.

即使在上面的程序中输入了Dennis Ritchie,名称字符串中也只有"Dennis"。因为Dennis后面有个空格。

如何读取一行文字?

您可以使用该fgets()函数读取一行字符串。并且,您可以puts()用来显示字符串。

示例2:fgets和puts

c 复制代码
#include <stdio.h>
int main()
{
    char name[30];
    printf("输入姓名: ");
    fgets(name, sizeof(name), stdin);  //读取字符串
    printf("姓名: ");
    puts(name);    //显示字符串
    return 0;
}

输出结果

c 复制代码
输入姓名: Tom Hanks
姓名: Tom Hanks

在这里,我们已使用fgets()函数从用户读取字符串。

c 复制代码
fgets(name, sizeof(name), stdlin); //读取字符串

sizeof(name)的结果是30。因此,我们可以接受最多30个字符作为输入,这是name字符串的大小。

为了打印字符串,我们使用了put (name);

**注意:**gets()函数也可以接受用户输入。但是,它已从C标准中删除。

这是因为gets()允许您输入任意长度的字符。因此,可能存在缓冲区溢出。

将字符串传递给函数

字符串可以通过类似于数组的方式传递给函数。了解有关将数组传递给函数的更多信息。

示例3:将字符串传递给函数

c 复制代码
#include <stdio.h>
void displayString(char str[]);

int main()
{
    char str[50];
    printf("Enter string: ");
    fgets(str, sizeof(str), stdin);             
    displayString(str);     //将字符串传递给函数   
    return 0;
}
void displayString(char str[])
{
    printf("字符串输出: ");
    puts(str);
}

字符串和指针

类似于数组,字符串名称"衰减"到指针。因此,您可以使用指针来操作字符串的元素。我们建议您在检查此示例之前检查C数组和指针。

示例4:字符串和指针

c 复制代码
#include <stdio.h>

int main(void) {
  char name[] = "Harry Potter";

  printf("%c", *name);     // 输出: H
  printf("%c", *(name+1));   // 输出: a
  printf("%c", *(name+7));   // 输出: o

  char *namePtr;

  namePtr = name;
  printf("%c", *namePtr);     // 输出: H
  printf("%c", *(namePtr+1));   // 输出: a
  printf("%c", *(namePtr+7));   // 输出: o
}

常用的字符串函数

  • strlen() -计算字符串的长度
  • strcpy() -将字符串复制到另一个
  • strcmp() -比较两个字符串]
相关推荐
荒古前21 分钟前
龟兔赛跑 PTA
c语言·算法
嵌入式科普1 小时前
十三、从0开始卷出一个新项目之瑞萨RZN2L串口DMA接收不定长
c语言·stm32·瑞萨·e2studio·rzn2l
小林熬夜学编程3 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Jackey_Song_Odd3 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
A懿轩A4 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
半盏茶香4 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
字节高级特工5 小时前
【C++】深入剖析默认成员函数3:拷贝构造函数
c语言·c++
计算机学长大白6 小时前
C中设计不允许继承的类的实现方法是什么?
c语言·开发语言
XH华11 小时前
初识C语言之二维数组(下)
c语言·算法
Uu_05kkq15 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法