在本教程中,您将学习C语言编程中的字符串。您将在示例的帮助下学习声明它们,对其进行初始化以及将它们用于各种 I / O(输入/输出)操作。
在C语言编程中,字符串是以null字符\0结束的字符序列。例如:
char c[] = "c string";
当编译器遇到用双引号引起来的字符序列\0时,默认情况下会在末尾附加一个空字符。
声明字符串的方法如下:
char s[5];
在这里,我们声明了一个5个字符的字符串。
您可以通过多种方式初始化字符串。
char c[] = "abcd"; char c[50] = "abcd"; char c[] = {'a', 'b', 'c', 'd', '\0'}; char c[5] = {'a', 'b', 'c', 'd', '\0'};
让我们再举一个实例:
char c[5] = "abcde";
在这里,我们尝试将6个字符(最后一个字符是'\0')分配给char具有5个字符的数组。这是错误的做法,您永远不要这样做。
C语言中数组和字符串一旦声明,它们就不支持赋值运算符。
char c[100]; c = "C programming"; // 错误! 数组类型不可分配。
注意:使用strcpy()函数代替复制字符串。
可以使用scanf()函数读取字符串。
scanf()函数读取字符序列,直到遇到空格(空格,换行符,制表符等)。
#include <stdio.h> int main() { char name[20]; printf("输入姓名: "); scanf("%s", name); printf("你的名字是 %s.", name); return 0; }
输出结果
输入姓名: Dennis Ritchie 你的名字是 Dennis.
即使在上面的程序中输入了Dennis Ritchie,名称字符串中也只有“Dennis”。因为Dennis后面有个空格。
您可以使用该fgets()函数读取一行字符串。并且,您可以puts()用来显示字符串。
#include <stdio.h> int main() { char name[30]; printf("输入姓名: "); fgets(name, sizeof(name), stdin); //读取字符串 printf("姓名: "); puts(name); //显示字符串 return 0; }
输出结果
输入姓名: Tom Hanks 姓名: Tom Hanks
在这里,我们已使用fgets()函数从用户读取字符串。
fgets(name, sizeof(name), stdlin); //读取字符串
sizeof(name)的结果是30。因此,我们可以接受最多30个字符作为输入,这是name字符串的大小。
为了打印字符串,我们使用了put (name);
注意:gets()函数也可以接受用户输入。但是,它已从C标准中删除。
这是因为gets()允许您输入任意长度的字符。因此,可能存在缓冲区溢出。
字符串可以通过类似于数组的方式传递给函数。了解有关将数组传递给函数的更多信息。
#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数组和指针。
#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 }