📜  C编程字符串

📅  最后修改于: 2020-10-04 12:26:46             🧑  作者: Mango

在本教程中,您将学习C编程中的字符串 。您将借助示例学习如何声明它们,对其进行初始化以及如何将它们用于各种I / O操作。

在C编程中, 字符串是一个字符序列,以空字符 \0结尾。例如:

char c[] = "c string";

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

Memory diagram of strings in C programming


如何声明一个字符串?

声明字符串如下:

char s[5];

string declaration in C programming

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


如何初始化字符串?

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

char c[] = "abcd";

char c[50] = "abcd";

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

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

Initialization of strings in C programming

让我们再举一个例子:

char c[5] = "abcde";

在这里,我们试图将6个字符 (最后一个字符为'\0' )分配给具有5个字符的char数组。这很糟糕,您永远不要这样做。


给字符串赋值

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

char c[100];
c = "C programming";  // Error! array type is not assignable.

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


从用户读取字符串

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

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


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

#include 
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” 。这是因为在丹尼斯之后有一个空格。


如何阅读一行文字?

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


示例2:fgets()和puts()

#include 
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); // read string

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

要打印字符串,我们使用了puts(name);

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

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


将字符串传递给函数

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


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

#include 
void displayString(char str[]);

int main()
{
    char str[50];
    printf("Enter string: ");
    fgets(str, sizeof(str), stdin);             
    displayString(str);     // Passing string to a function.    
    return 0;
}
void displayString(char str[])
{
    printf("String Output: ");
    puts(str);
}

字符串和指针

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


示例4:字符串和指针

#include 

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() -连接两个字符串