`

字符串、数组、指针(二)

    博客分类:
  • C++
阅读更多

代码二:编译正常,但运行会出现内存错误
char *name = NULL; //声明并初始化指针
printf("what's your name?\n");
scanf("%s", name);
printf("Hello, %s\n", name);
原因在于没有给name分配内存空间,所以要更改为以下代码实现
char *name = (char *)malloc(sizeof(char) * 1024);

char *name = (char *)malloc(_MAX_PATH);
if(NULL == name){
exit(1);
}
printf("what's your name?\n");
scanf("%s", name);
printf("Hello, %s\n", name);
注:#include <stdlib.h> /*For _MAX_PATH definition*/
printf()语句将输出传递给一个称为缓冲区(buffer)的中介存储区域。缓冲区中的内容不断地被传递给屏幕,标准C在以下几种情

况下将缓冲区内容传给屏幕:缓冲区满的时候、遇到换行符的时候、需要输入的时候(scanf语句)。将缓冲区内容传给屏幕或文件

称为刷新缓冲区(flushing the buffer): fflush()函数刷新缓冲区
scanf()开始读取输入以后,会在遇到的第一个空白字符空格(blank)、制表符(tab)或换行符(newline)处停止读取,因此在使用%s

的scanf()知会把一个单次而不是把整个语句作为字符串读入,C使用其他读取输入函数(如gets())来处理一般的字符串
数组、指针均可表示字符串,其实数组和指针之间可以很灵活通用,但必须很好的理解数据、指针和内存
char *str = "testString";
char str[] = "testString";
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics