C 编程字符串

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

char c[] = "c string";

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

Memory diagram of strings in C programming
内存图

如何声明字符串?

声明字符串的方法如下

char s[5];
string declaration in C programming
C语言中的字符串声明

这里,我们声明了一个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
C语言中的字符串初始化

让我们看另一个例子

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 <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后面有一个空格。

另外请注意,我们使用了代码name而不是&namescanf()一起使用。

scanf("%s", name);

这是因为name是一个char数组,我们知道在C语言中数组名会“退化”为指针。

因此,scanf()中的 name 已经指向字符串第一个元素的地址,这就是为什么我们不需要使用&


如何读取一行文本?

您可以使用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个字符,这是 name 字符串的大小。

为了打印字符串,我们使用了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);     // Passing string to a function.    
    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
}

常用的字符串函数

在我们结束之前,让我们来检验一下您在C语言编程字符串方面的知识!您能解决下面的挑战吗?

挑战

编写一个函数来检查给定的字符串是否为空。

  • 如果字符串为空,则返回1,否则返回0
  • 例如,如果str = "Hello",则预期输出为0

视频:C字符串

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战