C语言格式化输出的对照

printf(“<格式化字符串>”, <参量表>);

 

%d 十进制有符号整数 (记忆法:decimal)

%u 十进制无符号整数

%f 浮点数 (记忆法:float)

%s 字符串

%c 单个字符

%p 指针的值

%e 指数形式的浮点数

%x, %X 无符号以十六进制表示的整数

%0 无符号以八进制表示的整数

%g 自动选择合适的表示法

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=41

C++中sizeof()与strlen()的区别

        终于把Assignment 2做完了,在收尾阶段,遇到了要算char[]类型的长度的问题,我一开始用了sizeof(),后来发现不对,忽然想起来strlen(),用上就对了。其间,我还编了个程序实验了一下,发现这两个函数的区别。

#include
using namespace std;
void main()
{
char st[8];
strcpy(st,"good");
cout<<"sizeof:"<<sizeof(st)<<endl;
cout<<"strlen:"<<strlen(st)<<endl;
system("pause");
}

结果为:

  

 

这就说明sizeof()是计算分配给数组的长度的,因此结果是8;而strlen()是计算数组里装有数据的长度,所以结果是4。

       因此,如果我们要计算一个字符数组的长度的时候,应该使用strlen()函数。

如何实现装有字符串的数组的动态分配空间

一般情况下,我们会这样声明一个已知长度(假设是10)的装有字符串的数组:

char* a[10];

但是我的Assignment里面有两个文件,数组的长度根据文件而定,所以我不能将长度定死,就想到了如何动态分配一个装有字符串的数组的长度,也就是用户输入二维数组的长度。

下面就是我实验的代码:

#include
using namespace std;
void main()
{
	int in;
	char way1[3];
	char way2[3];
	char way3[3];
	cin>>in;
	char** ways=new char*[in];
	for(int i=0;i<in;i++) {
		ways[i]=new char[3];
	}
	strcpy(way1,"111");
	strcpy(way2,"222");
	strcpy(way3,"333");
	ways[0]=way1;
	ways[1]=way2;
	ways[2]=way3;
	for(int i=0;i<in;i++) {
		cout<<ways[i];
	}
	system("pause");
}

这样,就成功的完成了二维数组第一个dimension的动态分配,黑体字部分要注意。

在MFC中添加消息响应(给初学者看的)

        本人也是MFC的初学者,今晚在做MFC的过程中遇到了一个问题,就是如何使静态文本响应滑块移动的消息,经过学习,方法如下:

        在目标Dialog框中(是整体不是个别控件)按右键,选择“事件”,“Class or object to handle:”选择Dialog整体的名字,选择WM_HSCROLL,按“确定”就行了。在块中添加自己的语句就行了。

我加入的是

void MyDialog1::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
   if(pScrollBar->GetDlgCtrlID()==IDC_SLIDER1)
   {
    CSliderCtrl* pSlide=(CSliderCtrl*)pScrollBar;
    CString strText;
    strText.Format("%d",pSlide->GetPos());
    SetDlgItemText(IDC_STATIC1,strText);
   } 
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

在OnInitDialog()中加入了

BOOL MyDialog1::OnInitDialog()
{
CString strText;
CSliderCtrl* cc = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1));
cc->SetRange(15,30);
cc->SetPos(20);
strText.Format("%d",cc->GetPos());
SetDlgItemText(IDC_STATIC1,strText);
}

这样就完成了!

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=29

最近对数组指针的理解(请各位大虾指点指点)

最近在《面向对象程序设计基础(第二版)》这本书上看到一节关于指针数组和数组指针的区别,一下是我的理解,例如:

int* prt_array[10];

声明了一个包含10个整数类型指针变量的数组prt_array,也就是说声明了一个数组用来存放int类型的指针。

int (*array_ptr)[10];

声明的是一个指针类型的变量array_ptr,它指向一个长度为10的整数类型数组。

我们知道char ch[10];是一个字符串类型,其实是一个字符类型的数组。那么,一个指向字符串的指针是否就是char (*char_ptr)[10]呢?其实我一开始一直是这么认为的,觉得这样就是一个指针指向了数组的地址了,然后我编译之后发现地址的值是传不进去的,说类型不一样。最后我发现,其实字符串的指针跟字符的指针一样,就是char* char_ptr这样声明的。

以上是我个人的见解,不知道是否如此,如有错误请大家纰漏。

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=18