C 编程字符串

C 编程字符串

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

char c[] = "c string";

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

内存图

如何声明字符串?

声明字符串的方法如下

char s[5];

C语言中的字符串声明

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

如何初始化字符串?

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

char c[] = "abcd";

char c[50] = "abcd";

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

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

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

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而不是&name与scanf()一起使用。

scanf("%s", name);

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

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

如何读取一行文本?

您可以使用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); // 读取字符串

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

相关创意

永生钢笔和英雄哪个好
365bet体育在线官

永生钢笔和英雄哪个好

📅 09-21 👁️ 9777
如何利用软文推广高效引流?三大要点必读!媒介盒子分享
如何看到Android源码
bt365网址

如何看到Android源码

📅 07-09 👁️ 5323
52度九五至尊帝尊的价格-飞外网
365bet体育在线官

52度九五至尊帝尊的价格-飞外网

📅 07-24 👁️ 2425
fgo毒针哪里刷
注册送365

fgo毒针哪里刷

📅 08-17 👁️ 9703
武警服役年限及退伍时间详解
365bet体育在线官

武警服役年限及退伍时间详解

📅 11-19 👁️ 2525
饥荒蛤蟆打法分享 附联机版BOSS毒蕈位置
注册送365

饥荒蛤蟆打法分享 附联机版BOSS毒蕈位置

📅 08-08 👁️ 3492
你的狗有多少颗牙齿?关于狗牙齿的作用和区别,你知道哪些?