- 一直都知道的是字符串(字符数组)只有声明的时候可以赋值,类似这样:
char c[20]="something";
- 之后如果想要输入数据到这个数组中的话需要单个输入,也就是说下面这样是错误的做法:
char c[20];
c="anything";
- 不过类似动态数组的操作是可行的,有些编译器会报错
char *c;
c="anything";
比如vscode:
这样修改一下就行了
char *c;
c=(char*)"anything";
- 但是这并不是今天我想说的
- 声明并且初始化以后还可以接收一串输出,
#include <stdio.h>
#include <string.h>
int main() {
freopen("file out.txt","r",stdin);
char c[20]="something";
// char *c;
// c=(char*)"anything";
scanf("%s",c);
printf("%s\n",c);
return 0;
}
输出:
beautiful
- scanf()函数会自动在后面加上结束符
这个不明显,我们看下面一个例子
注意:下面这个声明方式使用scanf会报错
char *c;
c=(char*)"anything";
scanf("%s",c);
- 更神奇的现象,从中间接收输入
比如我们在c[2]处开始接收,我们输入nice
#include <stdio.h>
#include <string.h>
int main() {
freopen("file out.txt","r",stdin);
char c[20]="something";
scanf("%s",&c[2]);
printf("%s\n",c);
return 0;
}
输入
nice
输出
sonice
完全就是从这里就开始了啊!
另外再来看看scanf自动给我们添加的结束符
输入之前
输入之后
- 好了就是这样了
2022.5.23
今天在使用printf输出字符数组的时候因为一个小问题debug了半天
#include <bits/stdc++.h>
using namespace std;
int main()
{
//计算机图形学
freopen("file.txt", "r", stdin);
char *str = new char[10];
// char str[10];
scanf("%s", str);
printf("%s\n", str);//print correctly
printf("%s\n", *str);//error
return 0;
}
心里面一直觉得str是一个指针,然后在输出的时候就使用了第二种方法,在前面加了一个*号,哭~~~