C 字符串

在本文中,主要介绍了 C 语言的字符串,包括声明、初始化字符串以及各种字符串的操作。

在本文中,主要介绍了 C 语言的字符串,包括声明、初始化字符串以及各种字符串的操作。

在 C 语言中,字符串使用双引号包围起来的字符序列。例如:

char c[] = "c string";

当编译器遇到双引号包围起来的字符序列时,它默认在末尾附加一个空字符 \0

C 语言字符串的内存图
内存图中的字符串

如何声明一个字符串?

以下是声明字符串的方法:

char s[5];

C 语言中的字符串声明
字符串声明

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

如何初始化字符串?

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

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' )分配给具有 5 个字符长度的 char 数组。这很糟糕,你永远不应该这样做。

为字符串赋值

数组和字符串在 C 中是二等公民;一旦声明,它们就不支持赋值运算符。例如,

char c[100];
c = "C programming";  // 错误!数组类型的变量声明后不能再赋值。

**注意:**请改用 strcpy() 函数来复制字符串。

从用户读取字符串

scanf() 函数可以用来读取用户输入的字符串。scanf() 函数读取空白字符(空格、换行符、制表符等)之前的所有字符序列。

示例 1:scanf() 读取字符串

#include <stdio.h>
int main()
{
    char name[20];
    printf("Enter name: ");
    scanf("%s", name);
    printf("Your name is %s.", name);
    return 0;
}

输出

Enter name: Dennis Ritchie
Your name is Dennis.

在上面的程序中,索然输入的是 Dennis Ritchie,只有 Dennis 被存储在字符串变量 name 中。这是因为 Dennis 后面有个空格。

如何阅读一行文字?

如果您想读取一整行字符串,可以使用 fgets() 函数。然后,您可以使用 puts() 来显示字符串。

示例 2:fgets() 和 puts()

#include <stdio.h>
int main()
{
    char name[30];
    printf("Enter name: ");
    fgets(name, sizeof(name), stdin);  // read string
    printf("Name: ");
    puts(name);    // display string
    return 0;
}

输出

Enter name: Tom Hanks
Name: Tom Hanks

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

语句 fgets(name, sizeof(name), stdlin); 中的 sizeof(name) 结果为 30。因此,我们可以输入最多 30 个字符。

然后我们使用了 puts(name); 打印字符串。

注意: gets() 函数也可以是从用户那里获取输入。但是,它已从 C 标准中删除。这是因为 gets() 允许您输入任意长度的字符。这可能会导致缓冲区溢出。

将字符串传递给函数

将字符串参数传递给函数与传递数组参数类似。了解有关将数组传递给函数的更多信息。

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

#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("String Output: ");
    puts(str);
}

字符串和指针

与数组一样,字符串变量同样“衰减”为指针。因此,您可以使用指针来操作字符串的元素。请先参考 C 数组和指针章节了解更多信息。

示例 4:字符串和指针

#include <stdio.h>

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

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

  char *namePtr;

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

常用字符串函数

  • strlen() - 计算字符串的长度
  • strcpy() - 将一个字符串复制到另一个
  • strcmp() - 比较两个字符串
  • strcat() - 连接两个字符串