C 字符串
在本文中,主要介绍了 C 语言的字符串,包括声明、初始化字符串以及各种字符串的操作。
在本文中,主要介绍了 C 语言的字符串,包括声明、初始化字符串以及各种字符串的操作。
在 C 语言中,字符串使用双引号包围起来的字符序列。例如:
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'
)分配给具有 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()
- 连接两个字符串