首页 百科知识 字符数组的字符串可以整体输出吗

字符数组的字符串可以整体输出吗

时间:2022-10-17 百科知识 版权反馈
【摘要】:另一种通常是将整个字符数组作为一个整体来进行的,为此要使用scanf函数和printf函数的%s格式。此外,C语言还提供了gets和puts两个函数,可以更方便地进行字符串的输入和输出。将字符数组word以字符串的形式输出。这是因为C语言在用printf的%s格式输出字符数组的值时,系统会从字符数组的第一个元素开始依次输出字符,直到遇到终止字符'\0',才会结束输出。

4.3.2 字符数组的输入输出

要完成例4-5还需要输入和输出字符数组。

字符数组的输入输出有以下两种方式:

一种是像一般数组一样,一个一个元素地依次使用%c格式进行输入或输出,但使用起来很不方便。

另一种通常是将整个字符数组作为一个整体来进行的,为此要使用scanf函数和printf函数的%s格式。此外,C语言还提供了gets和puts两个函数,可以更方便地进行字符串的输入和输出。

1. 使用scanf函数和gets函数输入字符串

要使用scanf函数输入字符串,需要在scanf的格式字符串中使用%s参数,比如

  scanf("%s",word);

用于从键盘输入一个字符串,存储到word数组中,该字符串从第一个非空白的字符开始,到字符串遇到的第一个空白字符(空格、制表符或换行符)为止,系统自动为这个字符串加上'\0'结束标志。

当然,也可以一次输入多个字符串,比如

  scanf("%s%s",word,word1);

用于从键盘输入两个字符串,分别存储到word和word1数组中,这两个字符串之间用空白字符分隔。

另外,也可以用gets函数来输入一个字符串,其一般形式为:

  gets(字符数组名);

作用是从终端输入一个字符串到字符数组,比如

  gets(word);

用于从键盘输入一个字符串,存储到word数组中,该字符串由换行符以前的所有字符组成,系统也会自动为这个字符串加上'\0'结束标志。

注意:

(1)在使用scanf和gets函数输入字符串时,都只需要直接给出相应的字符数组名即可,不需像输入普通变量那样,使用&这个取地址的运算符。这是因为,在C语言中,数组名代表这个数组的首地址,因此,在这两个函数中,使用&word这样的方式是错误的,比如,下面的语句就是错误的。

  scanf("%s",&word);

  gets(&word);

(2)输入字符串前,必须先定义字符数组,且字符数组的长度必须大于要输入的字符串的长度;否则,会出现字符数组越界,在运行时出现不可预知的错误,而编译系统则不会报告,比如:

  char word[]="abcdef";

  scanf("%s",word);

如果输入为abcdefg,则运行时有可能出现如图4.3.4所示的错误,当然其中的内存地址与所使用的计算机的当前状态有关。

img356

图4.3.4 字符串输入出错信息

这是因为前面在定义word数组时,C分配word的长度为6,而输入的字符串的字符数为6,因此要存储这个字符串需要的数组长度为7,这样就会发生错误。

(3)要注意scanf函数和gets函数在读取字符串时的区别。由scanf函数读取字符串的功能知,用scanf函数读取的字符串中是不包含空白字符的,因为它会忽略开始的空白字符,以后当再次读取到空白字符时,就会结束读取。而gets函数所读取的字符串则可以包含空格。在使用时,要根据程序的功能进行合适的选择。

比如:

  char word[10];

  scanf("%s",word);

如果在键盘上输入abcd def,则word的值为"abcd"。而

  char word[10];

  gets(word);

如果在键盘上输入abcd def,则word的值为"abcd def"

2.使用printf函数和puts函数输出字符串

使用printf函数输出字符串,也需要使用%s格式,例如:

  printf("%s",word);

将字符数组word以字符串的形式输出。输出时,第一次遇到结束标记'\0'就停止输出,而不管其后还有没有别的字符。

当然也可以一次输出多个字符串,例如:

  char word[]="abc",word1[]="def";

  printf("%s%s",word,word1);

的输出结果为abcdef

另外,也可以使用puts函数来输出一个字符串,其格式为:

  puts(字符数组名)

其作用是将一个字符串输出到终端,并在输出时将字符串结束标记'\0'转换成'\n',即输出完字符串后换行,如

  char word[]="abc",word1[]="def";

  puts(word); puts(word1);

的输出结果为:

  abc

  def

注意:

在使用printf函数输出字符数组的值时,字符数组必须以'\0'结束,否则可能会显示很多乱字符。这是因为C语言在用printf的%s格式输出字符数组的值时,系统会从字符数组的第一个元素开始依次输出字符,直到遇到终止字符'\0',才会结束输出。

对于没有使用'\0'结束的字符数组,要想正确输出,必须像其他类型的一维数组一样,使用循环依次输出其各个数组元素。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈