我们很容易忽略的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);
}