字符串儿与字符数组
字符数组的定义:
Char buffer[100];
字符数组初始化:
Char buffer1[100]="hello world";
利用scanf输入一个字符串儿
代码:
#include <iostream> int main() { //字符数组定义,对于C语言就是最后一个元素为 的char数组。 char buffer[100]; //字符数组初始化 char buffer1[]="hello world"; printf("请输入一个字符串儿: "); scanf("%s",buffer); printf("输入的字符串是: "); printf(buffer); return 0; }
运行结果:
/*这里有一个小插曲:
Int a = 0;
Scanf("请输入整形a的值%d",&a);
这个 就比较坑,要输入一个,比如我们要给a赋一个5.
那么我们在控制台就要输入:
请输入整形a的值5
然后 printf("%d",a);就可以了。
*/
字符串儿处理函数:
gets()从外设读取字符串儿放到对应的字符串儿数组中。但是存在 内存泄露的问题,如果在第二函数里面输入过多的内容,就会导致缓冲区溢出。
溢出示意图:
【演示图与效果图中w的数量不一致】
溢出效果图:
演示代码:
#include <iostream> int main() { char charArray1[10]; char charArray2[10]; gets(charArray1); printf(charArray1); printf(charArray2); gets(charArray2); printf(charArray1); printf(charArray2); return 0; }
/*
也未必总是会报错:
这次就没出异常。然后修改了一下代码。
*/
这样系统就会很不稳定。所以就诞生了:fgets() 函数。
示例用法:
void fgetsFunction(void){ char charArray[10]; fgets(charArray,sizeof(charArray),stdin); printf(charArray); }
运行结果:
尝试冲突:
printf() 与 puts() 的输出区别。
示例代码:
void putsFunction(void){ char charArray[]="hello world"; printf(charArray); puts(charArray); printf(charArray); }
运行结果:
然后是fputs(),文件输出的意思:
查阅了一下文档:
【function
http://www.cplusplus.com/reference/cstdio/fputs/
<cstdio>
fputs
int fputs ( const char * str, FILE * stream );
Write string to stream
Writes the C string pointed by str to the stream.
The function begins copying from the address specified (str) until it reaches the terminating null character (' '). This terminating null-character is not copied to the stream.
Notice that fputs not only differs from puts in that the destination stream can be specified, but also fputs does not write additional characters, while puts appends a newline character at the end automatically.
】
简单翻译:
写一个字符串到流
写一个C的字符串到流中。
这个函数会复制 从str起始地址到str 的位置的内容。终止符号