C语言字符串输入方法总结

1.一定要先初始化指针。采用类似于char * pointer;的方式仅仅是声明了一个叫pointer的指针并给指针本身分配了内存。但这个指针本身的值是不确定的,指针胡乱指向任意内存中,此时对这个指针对应的地址操作会造成致命的问题。

2.字符串“zbcdefg”本身是一个地址,其值为第一个字母(本例中为z)所储存地方的地址。因此可以采用pointer=”abcdefg”的方式给指针赋值,因为右边是一个地址,就好像数组名称其实也是第一个元素对应的地址的另一种表示方法,二者完全等价。

3.scanf函数:用转换说明%s一次只能读取一个单词。更像是“获取单词”的函数,从第一个非空白字符作为起点,以下一个空白字符(空格,换行符,空行,制表符)作为结束。空白字符依旧会保留在输入流里面。scanf返回值为成功读取的项数或者EOF(文件结尾)。

4.gets(char*)函数读取整行输入,直到遇到第一个换行符,然后丢弃换行符。与此对应,puts函数在末尾自动添加换行符。gets的危险之处在于如果元素比声明的多,会发生缓冲区溢出(buffer overflow),puts本身不检验预防这种情况的发生。

fgets:第二个字符指明读入字符的最大数量,第三个指明传入流的来源。该函数保留读取到的所有换行符,如果超过了指定长度,丢弃剩下的!(换行符自然也就没有地方添加啦)fputs经常和它搭配使用,前者输出的时候不会在末尾增加换行符,否则有可能输出空行。fgets返回一个指向char的指针,地址为第一个字符的地址或者当它碰到文件结尾的时候返回NULL(空指针),保证不指向任何一个有意义的内存。fgets经常有处理换行符的麻烦。

gets_s:只从标准输入stdin中读取数据,不需要第三个参数。gets_s(words,length);函数丢弃换行符。如果到允许的末尾依旧没有找到换行符,任性的gets_s会进行丧心病狂的一系列操作:把数组的首字符设置为空字符\0,读取并丢弃剩下的所有字符直到换行符或者文件结尾,然后返回空指针。

发表评论

电子邮件地址不会被公开。 必填项已用*标注