微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 字符串常量的定义与引用

字符串常量的定义与引用

时间:08-14 来源:ZLG致远电子 点击:

同理"while(cStr[i] != '\0')"与"while(cStr[i])"是等价的。

 

当然,也可以使用scanf()函数的%s格式声明符输入字符串,详见程序清单 1.37。

 

程序清单 1.37  字符串的输入与输出范例程序

1     #include

2     int main(int argc, char *argv[])

3     {

4            char cStr[10];

5

6            scanf("%s", cStr);

7            printf("%s", cStr); 

8            return 0

9     }

 

由于cStr代表字符数组的起始地址,因此不需要在cStr前添加&运算符。但采用%s格式符输入字符串存在一种潜在危险,如果输入的字符串太长,超出了字符数组的存储极限,则程序执行错误,因此可以使用"字段宽度"来限制输入字符串的长度更安全。

 

由于字符串常量的类型是char的数组,则在表达式中被解读为指针。即不管字符串有多长,pcStr始终存储字符串第一个字符的地址,因此使用指向字符串的指针变量即可整体引用一个字符串。比如:

char       *pcStr = "OK!"; 

 

其中的pcStr是字符指针变量,其等效于

static const char t376[] = "OK!";

char *pcStr = t376;

 

其中的t376是编译器分配的一个内部变量名,不同编译器、不同程序、甚至同一个源代码每次编译,其名字均可能不同。显然,程序员不知道这个数组的名字,即匿名数组变量。显而易见,初始化字符数组存储字符串和初始化指针指向字符串的区别在于,数组名是常量,而指针名是变量,因此字符串的绝大多数操作都是通过指针完成的。

 

由此可见,"OK!"就是"char的数组",通过sizeof("OK!")也可以证明字符串的本质还是数组,即可用"OK!"作为数组变量名,详见程序清单 1.38。

 

程序清单 1.38  用字符串作为数组变量名范例程序

1     #include

2     int main(int argc, char argv *[]) 

3     { 

4            printf("OK!占用的空间%d", sizeof("OK!"));          // 输出"OK!"占用的空间,即4个字节

5            printf("OK!的地址%x\n", "OK!");                       // 输出"OK!"的地址

6            printf("%c\n", *("OK!" + 1));                         // 输出"OK!"的第1个元素,即'K' 

7            printf("%c\n", "OK!"[0]);                               // 输出"OK!"的第0个元素,即'O'

8            printf("%d\n", "OK!"[3]);                               // 输出"OK!"第3个元素的值,即'\0' 

9            return 0; 

10   } 

 

由于C语言允许对指针添加下标,因此程序清单 1.38(6~8

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top