C语言学了好久了… 但是一直没什么用… 所以写点博客碰到什么问题写什么吧…
字符数组可以 Scanf
以前一直认为字符数组不能用字符串赋值,所以也就不能 scanf
但是最近写字符驱动的经历让我发现,这是错的
#include <stdio.h>
int main(){
char string[50];
printf("Please input: ");
scanf("%s", string);
printf("Output: %s\n", string);
return 0;
}
字符串赋值给指针,字符数组
指针的赋值
// 此处参考:https://zhidao.baidu.com/question/183610522.html
// 这个挺好理解的
char a_test = 'a';
char *p = &a_test;
// 这个也挺常见的,但是还是重点讲讲
char *p = "hello";
// 这里这个双引号有 3 个作用
// (1) 常量区申请空间并放置字符串
// (2) 在字符串末尾加上 \0;这里需要辨析字符串 和 字符数组是有区别的;即 字符数组末尾 + \0 = 字符串
// (3) 返回该常量空间的地址
字符数组的赋值
- 初始化的赋值
- 不能直接用字符串常量向字符数组引用赋值
// 错误示范
char string[50];
string = "Hello World";
- 不能直接进行字符数组引用之间的赋值,此处注意跟其他高级语言的区分
// 错误示范
char a = "Hello";
char b = "World";
a = b;
字符数组的输出
// 此处转自:https://blog.csdn.net/Hello_MyDream/article/details/82502633
int main(int argc, char *argv[])
{
char arr[16] = {0};
/*scanf与%s同时使用时,遇到键盘输入的空格、回车就会结束输入*/
//scanf("%s", arr);
/*1.遇到空格不会结束输入
2.但是不会检测空间是否足够,容易造成内存越界(内存污染、空间污染等描述均是相同)。
3.不接收回车*/
//gets(arr);
/*1.遇到空格不会结束输入
2.检测空间是否足够,当输入超过数组容量时,会自动舍弃超出部分,而不会报错。
3.可是操作文件时使用,所以接收回车。*/
fgets(arr, sizeof(arr), stdin);
//printf("%s", arr);
//puts(arr);//输出一个字符串,自动添加换行符
//fputs(arr, stdout);//输出一个字符串,可以指定输出文件
printf("%d\n", strlen(arr));//输出字符串大小,不包含0。
printf("%d\n", sizeof(arr));//输出数组所占字节数,与字符串大小无关。
system("pause");
return 0;
}