2014_03_14工作日志:刚解决的几个疑问

        今天上午花了两个小时(9点到11点)把昨天的所有疑问都一一处理掉了,主要是问的尧哥,感觉很爽,又多了很多自信。就像每天去公司的路上,走到中关村科技园、中关村软件园的几个大字,一种激动的自豪感就不禁油然而生了。


1、_tcscat()可以将指针指向的区域移动到另一个指针所指向的区域吗?


答:当然可以啦,但是必须得先为第一个指向的区域开辟内存空间,这个空间不能太小。对于字符串来说,空间已满。。。

2、HelperFunc.c中的第299行少了一个返回值return null;。


答:可以不需要。


3、第59行为什么要判断lpcFilePath字符串中是否含有单个的反斜杠?第21行TEXT('\\')应该是获得单斜杠吧?


答:因为我没有仔细看,其实59行就是为了将单斜杠变为双斜杠的。TEXT('\\')指的是单斜杠的UNICODE值。


4、下面这段程序为什么不能运行?
#include<stdio.h>
#include <string.h>
void main()
{
char *p="B";
char *c="a";
strcat(p,c);
printf("%s",p);

}


答:因为p指向的是一个固定的内存空间。不能在里面直接添加字符串。若想添加,就必须为指针p动态地开辟一段较大的内存。sizeof(p)的结果永远是4,因为指针p是地址,大小就是32位,共4个字节。

查看如下程序,结果也是如此:
#include <stdio.h>
#include <string.h>
#include "malloc.h"
void main()
{
char *p;
p=(char *)malloc(40*sizeof(char));
p="123456789";
printf("%d\n",sizeof(p));
char *m="123456";
strcat(p,m);
printf("%s",m);

}

结果是  4 

程序无法执行


犯了同一个错误呢,虽然p指针指向了一块动态开辟的内存,但后来又指向了一个内存已固定的常量,因此,strcat函数会很无语。。。卡死中。。



正确的应为:(指针p必须得指向一个动态的内存,或者是数组空间也行。不能是字符串,因为字符串的空间已经固定已装满)
#include <stdio.h>
#include <string.h>
#include "malloc.h"
void main()
{
char *p;
p=(char *)malloc(400*sizeof(char));
printf("%d",sizeof(p));
char *m="123456";
strcat(p,m);
printf("%s",m);

}

结果是

4
123456


5、判断文件是否存在用if (((DWORD)-1)==GetFileAttributes(lpcFilePath)),我们在学校为什么没有考虑这么多呢?


答:我们平时用的是c语言编程,大部分用的是多字符集,一个ASII字符和一个结束符'\0'占一个字节,一个汉字占两个字节,而不是Unicode集(一个ASII字符、一个结束符'\0'、一个汉字均占两个字节)。

win32编程的大部分函数的返回值都是DWORD类型的,因此要依靠win32来决定。


6、将字符串拷贝到字符数组里,一定要考虑结束符"\0"也占一个位置。如

void test3(char* str1)
{
 char string[10];
 if( strlen( str1 ) <=10 )
 {
  strcpy( string, str1 );
 }
}
是错误的,没有考虑数组string的大小,数组大小应该至少设为11。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值