我们很容易忽略的c语言知识(二)
来源:互联网 发布:unity3d java服务器 编辑:程序博客网 时间:2024/05/17 15:06
这是我几天前发过的一段错误代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char *alice; //没有分配内存空间
printf("请输入alice说的话\n");
scanf("%s",alice);
printf("%s\n",alice);
}
为什么无法打印输入的字符串?
我想曾经很多人都犯过这样的错误,却无法找到答案,也许是指针太有点难理解了,作为初学者,我们总被这东西搬到,好在还有好多老师帮我们,
再次谢过各位好心人了
回到正题:
此段代码之所以没有打印出字符串是因为我们只是声明了一个指针,而没有给其分配内存空间,应该这样修改:
c++: char *alice = new char[maxsize];
delete[] alice; //new过的东西一定要释放掉
c:
char *pAlice = NULL ;
pAlice = (char *)malloc(sizeof(char) * 50); // 申请空间
if ( pAlice == NULL )
{
return -1; // 空间申请有误,返回
}
memset(pAlice, 0, sizeof(char) * 50 ); // 为成功申请的空间赋初值
printf("请输入alice说的话:");
scanf("%50[^\n]",pAlice); // 接收从键盘输入的字符串,包括空格
printf("\n%s\n",pAlice);
free(pAlice); // 释放申请的内存
pAlice = NULL; //这不也很重要,这样指针才能完全释放
return 0;
或者:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char alice[10]; //定义成数组,c语言数组是默认分配空间的,但是数组声明时必须说明大小,char alice[]是错误的
printf("请输入alice说的话\n");
scanf("%s",&alice);
printf("%s\n",alice);
}
- 我们很容易忽略的c语言知识(二)
- 我们很容易忽略的常用c语言知识
- 一些很容易被忽略但又很有用的 C 语言函数
- 那些我们不曾注意的C语言小众知识(一)
- C语言的小知识(二)
- C/C++中Static的作用详述 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。
- 一个很容易被忽略的东西----toString()
- 我们可以很容易操作的SEO减法
- json-c有时我们会忽略的问题
- C语言中易被忽略的地方
- 我所忽略的c 语言标准
- C语言中容易忽略的问题
- C语言中可能忽略的“注释”
- c语言容易忽略的点
- 【C/C++】C语言中一些容易被人忽略的东西 之二 【typedef 与函数的姻缘】
- java 中一个很容易忽略的多线程错误!
- 批处理及DOS的一些重要命令 很容易忽略
- 网站优化很容易被忽略的几点
- Android之使用Android-query框架进行开发(一)
- 在myeclipse 任意版本添加SVN插件,不会出错误提示,完美版本。
- 动态规划-最长公共子序列
- 八方因素决定负载均衡方案
- C语言中二维数组的动态申请与释放
- 我们很容易忽略的c语言知识(二)
- JAVA和C++高低位转换
- cat和EOF
- C# 枚举 Win32_LogicalDisk 类的所有实例,并显示每个实例的 DeviceID 值
- stagefright,OpenMax框架
- 数据结构学习笔记之三(二叉树)
- [算法] poj 3356 字符串的距离 AGTC
- multiple definition of 问题解决方法
- netfilter与用户空间通信二法