c语言字符串2

目录

字符串数组

程序参数

单字符输入输出

下一篇: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所做的事情

猜你喜欢

转载自blog.csdn.net/weixin_46919419/article/details/112550209