### C语言中字符串(string)的基本用法
在C语言中,字符串并不是一种基本数据类型,而是由字符数组(character array)来表示的,这意味着字符串实际上是一组以空字符(null character,即'\0')结尾的字符序列,了解这一点对于正确使用C语言中的字符串至关重要。
#### 1. 字符串的声明与初始化
在C语言中,你可以使用字符数组来声明和初始化字符串。
```c
char greeting[14] = "Hello, World!";
这里,`greeting`是一个字符数组,可以存储14个字符(包括末尾的空字符)。注意,字符串字面量(如"Hello, World!")在内存中会自动添加一个空字符作为结尾,所以数组的大小需要比字符串的实际字符数多1。 #### 2. 字符串的输入与输出 在C语言中,你可以使用`printf`函数来输出字符串,使用`scanf`函数来输入字符串。但是,由于`scanf`函数在读取字符串时不会读取空格,所以通常使用`fgets`函数来读取包含空格的字符串。 **输出字符串**: ```c #include <stdio.h> int main() { char greeting[14] = "Hello, World!"; printf("%s\n", greeting); return 0; }
**输入字符串**:
#include
int main() {
char input[100];
printf("Enter a string: ");
fgets(input, sizeof(input), stdin); // 读取包含空格的字符串
printf("You entered: %s", input);
return 0;
}
注意:`fgets`函数会读取换行符('\n')并将其存储在字符串中,所以如果你不想在输出时看到换行符,可以使用`strcspn`函数或手动替换掉它。 #### 3. 字符串操作函数 C语言标准库提供了一系列用于操作字符串的函数,这些函数定义在`string.h`头文件中。以下是一些常用的字符串操作函数: * `strlen(str)`: 返回字符串`str`的长度(不包括末尾的空字符)。 * `strcpy(dest, src)`: 将字符串`src`复制到字符串`dest`。注意,`dest`必须有足够的空间来存储`src`(包括末尾的空字符)。 * `strcat(dest, src)`: 将字符串`src`追加到字符串`dest`的末尾。同样,`dest`必须有足够的空间来存储追加后的结果。 * `strcmp(str1, str2)`: 比较两个字符串`str1`和`str2`。如果`str1`小于`str2`,则返回负数;如果`str1`等于`str2`,则返回0;如果`str1`大于`str2`,则返回正数。 * `strstr(str1, str2)`: 在字符串`str1`中查找字符串`str2`的第一次出现。如果找到,则返回指向该位置的指针;否则返回NULL。 以下是一个使用这些函数的示例: ```c #include <stdio.h> #include <string.h> int main() { char str1[50] = "Hello, World!"; char str2[20] = "World"; char result[70]; printf("Length of str1: %zu\n", strlen(str1)); // 输出字符串长度 strcpy(result, str1); // 复制字符串 printf("Copied string: %s\n", result); strcat(result, " again!"); // 追加字符串 printf("Concatenated string: %s\n", result); if (strcmp(str1, str2) == 0) { printf("str1 and str2 are equal.\n"); } else { printf("str1 and str2 are not equal.\n"); } char *pos = strstr(str1, str2); // 查找子字符串 if (pos) { printf("Found '%s' in '%s' at position: %ld\n", str2, str1, pos - str1); } else { printf("'%s' not found in '%s'.\n", str2, str1); } return 0; }
这个示例展示了如何使用C语言标准库中的字符串操作函数来执行各种常见的字符串操作。