请教几个基本问题

zengzhimin1980 2009-08-10 10:04:27
问题一:
char tmp[10];
sprintf(tmp,"1234567890abc");

为什么以上程序运行正常,tmp=124567890abc, tmp不是已定义为10长度吗?,这样不是应该越界吗?

问题二:
在我理解中,string 应是等于char[]的,但是为什么以下程序不正确呢?
CString s;
char tmp[10]={'1','2','3','4','5','6','7','8','9','0'};

s=char;

问题三:

指针的指针表示什么?如:
int* p=12;
*p=?
还是就是int* p与int *p是同一回事吗?

...全文
77 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huziwu 2009-08-10
  • 打赏
  • 举报
回复
问题一:
楼上的已回答了

问题二:
CString s;
char tmp[10]={'1','2','3','4','5','6','7','8','9','0'};

s=char;//应该改为s=tmp;

问题三:
int *p=12;申请一个指向常量的指针,指针名为p,指针首地址的内容为*p
所以
*p=12

danxuezx 2009-08-10
  • 打赏
  • 举报
回复
第一个问题:
因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。
第二个问题:
s是CString对象,char是数据类型,您把数据类型给一个类型的对象?
第三个问题:
*p=12;
int* p和int *p本来就是一回事情。
至于采用什么写法完全是个人喜好问题。
这不是鸭头 2009-08-10
  • 打赏
  • 举报
回复
第一个,问题确实已经越界了,但是不是所有的越界都会马上出问题的。但是出问题是早晚的事
第二个
CString s;
char tmp[10]={'1','2','3','4','5','6','7','8','9','0'};
s=char; //这个地方出了问题 应该是 s = tmp
第三个:int* p与int *p是一回事 还有一种写法 : int * p 都是可以的
但是要看公司的编码规范,具体的写法。

socoola 2009-08-10
  • 打赏
  • 举报
回复
char tmp[10];
sprintf(tmp,"1234567890abc");

为什么以上程序运行正常,tmp=124567890abc, tmp不是已定义为10长度吗?,这样不是应该越界吗?

在debug版本模式下,系统会给你默认多分配一点无用的堆栈空间,虽然已经越界了,但是写到无用的堆栈空间去了,无所谓,改成release版本编译试试
sanguomi 2009-08-10
  • 打赏
  • 举报
回复
楼主好好看下基础吧
stuarts740 2009-08-10
  • 打赏
  • 举报
回复
s = char ..
笑过

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧