1、使用scanf()函数,格式控制符为%s
#include <stdio.h>
int main(){
char arr[5];
scanf("%s",arr);
int i;
for(i=0; i<5; i++){
printf("%c",arr[i]);
}
return 0;
}
重点:地址列表不要使用&arr,该数组的名称是一个指向数组第一个元素的指针。在这里是指向能够存放字符串的内存块的首地址。
优化:无需循环遍历
#include <stdio.h>
int main(){
char arr[5];
scanf("%s",arr);
printf("%s",arr);
return 0;
}
值得注意的是:scanf(),都会从非空格处开始接收字符,在遇到空格就结束接收了。
缺点:如果输入的字符串长度小于 5,则 scanf() 函数会自动为字符串添加空字符 \0;如果输入的字符串长度等于或大于 5,则 scanf() 函数只会读取前 4 个字符,并在最后一个字符的位置添加空字符 \0。
2、使用gets()函数(推荐使用!!!)
gets()函数会将输入的字符全部取出,去掉回车符,在输入的字符后加上'\0',然后将其存储到以数组名值为首地址的内存空间。
#include <stdio.h>
int main(){
char arr[10];
gets(arr);
printf("%s\n",arr);
return 0;
}
如果使用printf("%s",arr)方式输出,可能出现错误,因为字符数组里可能没有'\0'的结束标准:
#include <stdio.h>
int main(){
char arr[]={'a','\0','b','c'};
printf("%s",arr);
return 0;
}
输出结果就是a;
总结:
无论使用什么方法输入字符串,都建议开发者在定义字符数组时,为其分配足够的空间(通常需要额外一个字节来存储空字符 \0),并在向其写入数据之前,确保在其末尾添加了空字符 \0。