c++杂七杂八的注意点

来源:互联网 发布:小说素材软件 编辑:程序博客网 时间:2024/06/07 12:44

1.strcpy(s1,s2)中s1,s2是字符数组的首地址。

char * code;cd=(char*)malloc(sizeof(char)*n); strcpy(cd+n-1,"\0");    // strcpy(s1,s2);中s1和s2都是字符数组的首地址,所以这里也该放地址,不是strcpy(cd[n-1],"\0");

2.c++自动将”“里的内容作为字符串,字符串以”\0”结尾。以下这种企图逆序一个字符一个字符输入(实际上上输入的是字符串)的方法最后printf的结果是h。

    char * code;                  code=(char *)malloc(sizeof(char)*4);      strcpy(code+3,"\0");         strcpy(code+2,"!");          strcpy(code+1,"i");          strcpy(code+0,"h");          printf("%s\n",code);     

仅printf h的原因,请看整个程序的过程:
这里写图片描述
图片为3,4,5,6代码执行后字符串数组code的状态。
注意第四行代码code里\0来源:”!”的内容为 !\0.这个\0是!带来的,把原来的\0覆盖了。第五行code[2]==\0也就容易理解了。
为了验证其正确性,第七行可以改为printf(“%s”,code+2); 结果
为一个单纯的回车。当杠掉第五行代码时,结果为!。
如果一定要逆序输入的话,解决的办法可以是建个堆栈,先把逆序的所有字符全压入栈,然后再一个个出栈就是顺序的啦。这样是字符覆盖\0,而不是之前的\0覆盖字符,问题就解决了。PS:第三行的\0好多余的存在。

3.

    typedef char test[5][5];  //test类型是一个5*5的矩阵     test t;             strcpy(t[0],"abb");    strcpy(t[2],"cbb");    printf("%s\n",t[2]);

4.

bool visited[MAX_VERTEX_NUM];//注意,布尔类型为bool,值为false和true,均小写。 布尔型数组默认为false。//定义一个int类型的数组,不用初始化,默认为0.//int类型的最大值   INT_MAX 编译器事先定义好了

5.读取文件

    #inculde<stdio.h>    FILE *file=fopen("fudn.txt","r");    fscanf(file,"%s",str);    fclose(fudn);       //注:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束。
0 0
原创粉丝点击