C措辞教程第四章: 数组(5)


  用字符串体式格式赋值比用字符逐个赋值要多占一个字节, 用于寄放字符串竣事标志'\0'。下面的数组c在内存中的理论寄放情况为: C program\0`\0'是由C编译琐细主动加上的。因为收受接管了`\0'标志,以是在用字符串赋初值时伟大无须指定命组的长度, 而由琐细自行措置。在收受接管字符串体式格式后,字符数组的输入输入把变得庞大利便。 除了上述用字符串赋初值的要领外,还可用printf函数和scanf函数一次性输入输入一个字符数组中的字符串, 而不消使用循环语句逐个地输入输入每个字符。
void main()
{
static char c[]="BASIC\ndBASE";
printf("%s\n",c);
}
详细在本例的printf函数中,使用的格式字符串为“%s”, 阐扬阐发输入的是一个字符串。而在输入表列中给出数组名则可。 不克不及写为: printf("%s",c[]);
void main()
{
char st[15];
printf("input string:\n");
scanf("%s",st);
printf("%s\n",st);
}
  本例中因为界说数组长度为15, 因此输入的字符串长度必须小于15,以留出一个字节用于寄放字符串竣事标志`\0`。 应该阐明');的是,对一个字符数组,要是不作初始化赋值,则必须阐明');数组长度。还应该额定详细的是,当用scanf函数输入字符串时,字符串中不克不及含有空格,否则把以空格作为串的竣事符。比方运转例4.8,当输入的字符串中含有空格时,运转情况为: input string:this is a book this 从输入了局可以看出空格当前的字符都未能输入。 为了避免这种情况, 可多设几个字符数组分段寄放含空格的串。法式可改写如下:
Lesson
void main()
{
char st1[6],st2[6],st3[6],st4[6];
printf("input string:\n");
scanf("%s%s%s%s",st1,st2,st3,st4);
printf("%s %s %s %s\n",st1,st2,st3,st4);
}
  本法式分别设了四个数组, 输入的一行字符的空格分段分别装入四个数组。然后分别输入这四个数组中的字符串。在前面介绍过,scanf的各输进项必须以地址体式格式泛起,如 &a,&b等。但在例4.8中倒因此数组名体式格式泛起的,这是为什么呢?这是因为在C措辞中规定,数组名就代表了该数组的首地址。 整个数组因此首地址扫尾的一块继续的内存单位。若有字符数组char c[10],在内存可阐扬阐发如图4.2。设数组c的首地址为2000,也便是说c[0]单位地址为2000。则数组名c就代表这个首地址。因此在c前面不克不及再加地址运算符&。如写作scanf("%s",&c);则是错误的。 在执行函数printf("%s",c) 时,按数组名c找到首地址,然后逐个输入数组中各个字符直到遇到字符串阻止标志'\0'为止。



版权声明: 原创作品,答允转载,转载时请务必以超链接举措标明文章 原始来因 、作者信息和本声明。否则将深究纪律责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975608.html