目录
下一篇:c语言字符串函数
字符串数组
字符串数组:
char **a
a是一个指针,指向另一个指针,那个指针指向一个字符(串)
char a[][]={
"hello",
};
这是一个二维数组,第二个[]没有给值就会报错
这么写相当于a是一个数组,数组中每一个单元都是一个char[10]
char a[][10]={
"hello",//a[0]-->char[10]
"1234adsasdasd"//如果超过10
};
这么写是可以的相当于a[0]=cahr*,与上面是不同的
//a[0]-->char *;
char *a[]={
"hello",
"1234adsasdasd"
};
程序参数
int main(int argc,char const *argv[])
argc是整数,*argv是字符串数组,整数是告诉后面数组有多大的
argv[0]是命令本身
当使用unix的符号连接时,反映符号连接的名字
int main(int argc,char const *argv[])
{
int i;
for(i=0;i<argc;i++){//循环遍历参数
printf("%d:%s\n",i,argv[i]);
}
return 0;
}
直接执行
意思是就只有一个,第0个是当前目录下刚才输入的执行命令
当输入多个就都能读到了
为什么argv[0]是执行的命令?
因为在linux与unix里面有软连接
创建软连接
查看
执行./my
系统需要告诉你是怎么执行的,是my执行的而不是c_learn执行的,在win环境下例如执行快捷方式+参数也是同样的意义
单字符输入输出
putchar:
int putchar(int c);//c实际上能接收只是一个字符而已
向标准输出写一个字符
返回写了几个字符,正常情况返回1,EOF(-1)表示写失败(end of fail是c语言定义的宏值是-1)
getchar
int getchar(void);
从标准输入读入一个字符
返回类型是int是为了返回EOF(-1)表示输入结束
Window-->Ctrl-Z
Uinx-->Ctrl-D
int main(int argc,char const *argv[])
{
int ch;
while((ch=getchar())!=EOF)
{
putchar(ch);
}
printf("EOF\n");
return 0;
}
执行后我们输入什么都会被打印出来,只有使用ctrl+c终止,这时发现printf并没有执行
但是!按下ctrl+D则会得到printf输出的EOF
说明程序读到了EOF
那么为什么getchar是读一个却要敲回车才给回答呢?
输入和输出的东西都会先交给shell才会交给程序和用户,shell做了行编辑的工作,在按下回车之前这些字都没有到程序那里,直到按下回车,shell那里有个很大的缓冲区,把送进去的东西都填在那
用户的输入只是去让shell填这个缓冲区
当按下ctrl+d shell接收到之后在缓冲区填一个-1或者别的结束标志
具体方式不同shell不同操作系统不同编译器都可能不一样
最后getchar读-1结束
如果用的是ctrl+c则不会放到缓冲区shell直接关闭了这个程序
这些就是标准输入和shell所做的事情