C语言字符串赋值的正确方法及常见错误解析

学了这么多年C语言,突然发现连字符串赋值都是错的。真的很难过。

C语言字符串赋值的正确方法及常见错误解析

字符a[10];

如何给这个数组赋值呢?

1.定义时直接使用字符串赋值

字符 a[10]="你好";

注意:不能先定义再赋值,如char a[10]; a[10]="你好";这是错误的!

2.给数组中的字符一一赋值

char a[10]={'h','e','l','l','o'};

3.使用strcpy

字符a[10]; strcpy(a, "你好");

容易出错的情况:

1. 字符a[10]; a[10]="hello";//一个字符怎么能包含一个字符串呢?而且,a[10]并不存在!

2. 字符a[10]; a="hello";//这种情况很容易出现。虽然a是一个指针,但它已经指向堆栈中分配的10个字符空间。现在在这种情况下,a 指向数据区域。 hello常量,这里的指针a是混淆的,不允许的!

C语言运算符根本不能对字符串进行操作。在C语言中,字符串被视为数组。因此,字符串受到与数组相同的限制。特别是,它们不能使用 C 语言运算符进行复制和比较。

直接尝试复制或比较字符串将会失败。例如,假设 str1 和 str2 具有以下声明:

字符str1[10],str2[10];

无法使用 = 运算符将字符串复制到字符数组中:

str1 =“abc”; /*** 错误的 ***/

字符串2 = 字符串1; /*** 错误的 ***/

C 语言将这些语句解释为一个指针和另一个指针之间的(非法)赋值操作。但是,使用 = 初始化字符数组是合法的:

char str1[10] = "abc";

这是因为在声明中,= 不是赋值运算符。

尝试使用关系或相等运算符比较字符串是合法的,但不会产生预期的结果:

if (str1==str2) ... /*** 错误 ***/

该语句将 str1 和 str2 作为指针进行比较,而不是比较两个数组的内容。由于 str1 和 str2 具有不同的地址,因此表达式 str1 == str2 的计算结果必须为 0。

原文网址:

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

85阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

85阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读