社区
C语言
帖子详情
简单C问题?只是我不知道,等待,答案合适就揭帖!!!
lyr311
2003-08-19 09:07:20
各位好!问两个简单问题,只是我学C不久,不知道而已:
1.(大家不要笑话哈)C中编程使用中文时,怎样实现翻页啊,怎么不能用PageDown翻页呢?
2.C中指针数组有多少元素怎样用通式表示,如:
char *num[]={"abcd","efgh","hi","j","klm"};
char **p;
for(p=num;p<num+4;printf("%s",*p),p++);
最后一句的"4"能用通式表示吗?盼答!!!
...全文
73
22
打赏
收藏
简单C问题?只是我不知道,等待,答案合适就揭帖!!!
各位好!问两个简单问题,只是我学C不久,不知道而已: 1.(大家不要笑话哈)C中编程使用中文时,怎样实现翻页啊,怎么不能用PageDown翻页呢? 2.C中指针数组有多少元素怎样用通式表示,如: char *num[]={"abcd","efgh","hi","j","klm"}; char **p; for(p=num;p<num+4;printf("%s",*p),p++); 最后一句的"4"能用通式表示吗?盼答!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lyr311
2003-08-20
打赏
举报
回复
对了, kof99(hongzhiyong) ,按照你的方法,我修改了配置文件congfig.sys ,还是有问题啊,如果在纯DOS下运行,则直接跳出,报如下错误:
exit error=3,winerror=0 ???????????这是什么意思啊?
补充一句,我的中文环境是用pdos95加载的。
lyr311
2003-08-20
打赏
举报
回复
楼上的老兄:上面的几条语句是什么意思啊,我的DOS学得很臭啊,麻烦给解释一下啊!
lyr311
2003-08-20
打赏
举报
回复
揭帖拉,感谢大家参与啊!
lyr311
2003-08-20
打赏
举报
回复
老兄,能不能解释一下config.sys的几句啊
DOS=HIGH,UMB
device = c:\windows\himem.sys
我的DOS学得很臭啊
kof99
2003-08-20
打赏
举报
回复
微软的PDOS95很烂,狂占内存,最好用CCDOS97,这个版本不错. 用UCDOS也成.
建议不要在纯DOS下,如果不是要写一些直接控制硬件的程序,还是在WIN98的MS-DOS模式下.
这样应该就不会有那么多毛病.
另: 在WINDOWS还是把 device=c:\windows\emm386 ram 这句去掉
kof99
2003-08-20
打赏
举报
回复
被你搞蒙了,NND,:"Out of memory"
这个是内存不足,跟编程序没关系
DOS的内存问题懒得和你多说
这样解决:
改 congfig.sys (一般在C:\,没有就自己建一个)
内容: DOS=HIGH,UMB
device = c:\windows\himem.sys (应该有这个文件吧)
device = c:\windows\emm386.exe RAM (你应该是在纯DOS下吧)
cdxiaogan
2003-08-20
打赏
举报
回复
指针变量存储地址值,在C语言中,地址是unsigned int型,任何变量的地址都是固定大小的(与系统及编译器有关,比如32b或16b的),一般是16位,两字节,所以无论是结构体还是一般变量测试的地址都是2(Bytes)大小。
sizeof(zw)是测试zw这个数组的所占空间(因为zw是数组名)
sizeof(zw[i])是每个元素的空间
sizeof(*zw[i])是zw[i]所指的那个变量的空间,因为是字符指针,所以是1(字符占一个字节空间)
lyr311
2003-08-19
打赏
举报
回复
嗯,好了,我全方位的做了一遍测试,楼上二位 的有道理,但是新问题又来了,且看:
我的测试结果如下:
#include <stdio.h>
#include <string.h>
main()
{
char *zw[]={"abc","def","g","jk"};
int i;
i=0;
while(*zw[i]!=NULL)
{printf("i=%d,Len=%d,size1=%d,size2=%d,size3=%d,size4=%d\n",
i,strlen(zw[i]), sizeof(zw[i]),sizeof(zw),
sizeof(*zw[i]),sizeof(*zw));
i++;}
}
运行结果如下:
i=0,Len=3,size1=2,size2=8,size3=1,size4=2
i=1,Len=3,size1=2,size2=8,size3=1,size4=2
i=2,Len=1,size1=2,size2=8,size3=1,size4=2
i=3,Len=2,size1=2,size2=8,size3=1,size4=2
用sizeof(zw)/sizeof(zw[i])=4,这个基本上理解了,但是关于用sieof测试指针数据类型的结果我一直比较疑惑,sizeof(zw[i])==2,sizeof(zw)=8,sizeof(*zw[i])==1,而当结构体中建立如下数据类型时:
struct stu{long a;float score;struct stu *next;}
此时测试的指针类型字节数占用2个字节,为什么啊?sizeof函数测试指针类型时结果是怎样得来的啊,望答复啊!!!
GhostAdz
2003-08-19
打赏
举报
回复
有个很严重的问题,最好不要比较地址啊“p<num+4;”这在比较地址
不安全也无意义,当然在这里不会影响结果,但是换个方法比较好
另外同意楼上的观点,每个数组成员都是一个存放char 的地址
放的都是字符窜的首地址
ianzy
2003-08-19
打赏
举报
回复
sizeof( num ) / sizeof( num[0] ) 是对的。即使字符个数不一样,它也能得到正确的结果。原因如下:
num 是一个指针数组,它的每一个成员是一个指针,只不过这个指针指向一个字符串。但不管字符串长度怎样,指针的长度总是一样的。所以,sizeof( num[0] ) = 4 (32位机)。而 sizeof( num[0] ) == sizeof( num[1] ) ... == sizeof( num[4] ) )。所以上面的公式即可用来求数组的长度。不知楼主明白了吗?
lyr311
2003-08-19
打赏
举报
回复
大家的意见很好,继续啊,我还是不懂C中指针数组有多少元素怎样用通式表示,如:
char *num[]={"abcd","efgh","hi","j","klm"};
char **p;
for(p=num;p<num+5;printf("%s",*p),p++);
最后一句的"5"能用通式表示吗?
关键是各个数组元素的字符个数不一样啊,除了 longenic(江寒) 的方法之外,还有能用通式解决的吗???用盼答!!!
lyr311
2003-08-19
打赏
举报
回复
谢谢 OSNC_17(刘海啸),好惭愧,好久没用过DOS下的中文了,竟然忘了,学习!!!
OSNC_17
2003-08-19
打赏
举报
回复
你所说的翻页是不是在UCDOS下的五笔输入?
这个好简单的,不就是按+号嘛。
lyr311
2003-08-19
打赏
举报
回复
goodboy1881(三井) :
你的程序也只是适用于那种一般的数组啊,要是是指向指针的数组,各字符窜字符个数不等的时候那个计算公式就不行吧??????????
lyr311
2003-08-19
打赏
举报
回复
对了,plainsong(短歌)老兄 啊,你的答案:
#define ARY_LEN(X) (sizeof(X) / sizeof(X[0]));
这时ARY_LEN(num)的值就是5(它有5个元素,不知道你的4来自何处)。
=========================================================================
这种情况是不是只适用于各数组元素字符相等的情况啊?????
lyr311
2003-08-19
打赏
举报
回复
我的意思是选字的时候不能翻页,咋回事啊?其他的一般用PageDown就翻页了,我用的TC2.0.
通式就是通用的公式啊,就是要满足一般情况,比如像 plainsong(短歌) 那样。
另外,我又遇到问题了,我的TC程序中指针数组怎么用中文的时候就报如下错误啊,错误提示:"Out of memory"
积木
2003-08-19
打赏
举报
回复
1.(大家不要笑话哈)C中编程使用中文时,怎样实现翻页啊,怎么不能用PageDown翻页呢?
编程和文字处理是两个概念,没有什么页不页的
积木
2003-08-19
打赏
举报
回复
.C中指针数组有多少元素怎样用通式表示,如:
char *num[]={"abcd","efgh","hi","j","klm"};
char **p;
for(p=num;p<num+4;printf("%s",*p),p++);
最后一句的"4"能用通式表示吗?盼答!!!
给你一个例子,我写的,你说的这个是典型的范型算法思想;
int main()
{
int a[10] = {20,30,50,80,30,20,78,42,38,69};
int* a_begin = a;
int* a_end = a + sizeof(a)/sizeof(int);
int* p;
for(p = a_begin;p!=a_end;p++)
{
printf("%d\t",*p);
}
return 0;
}
lybapple
2003-08-19
打赏
举报
回复
1。C中编程使用中文时,怎样实现翻页啊,怎么不能用PageDown翻页呢?
你的编译器是什么?没有说清楚。
2。什么是通式?
longenic
2003-08-19
打赏
举报
回复
也不能这么除吧。
char *num[]={"abcd","efgh","hi","j","klm"};
char **p;
for(p=num;p<num+4;printf("%s",*p),p++);
改为其他的方式就可以了。
int i=0;
while(num[i] != NULL)
{
printf("%s",num[i]);
i++;
}
加载更多回复(2)
强制
揭帖
出bug了
这次信誉分被扣是由于被强制
揭帖
所致。CSDN已经在2周前发了公告要求用户自行
揭帖
。强制
揭帖
所扣信誉分不会被记录到信誉分变化记录中。这次强制
揭帖
是对2004年7月到2005年6月之间的未结非0分帖子进行了强制
揭帖
。每一个被强制
揭帖
的帖子,帖主扣除总信誉分1分,及对应帖子所在大版信誉分1分。由于我们工作的失误,强制
揭帖
中出现了一个逻辑错误:2004年7月到2005年6月之间的被删除的非0分帖子也会被强
[VB.NET]急死!2005中如何更新数据源,老鸟帮帮手,立马
揭帖
<script type="text/javascript"
VB版2004年度专家榜(
揭帖
时间为2004年度的得分汇总)
VB版2004年度专家榜(
揭帖
时间为2004年度的得分汇总) 有帖子是2003年的,但是
揭帖
是 2004 年的情况。online63603rainstormmaster48780tztz52032383MSTOP24957daisy867524517cuizm23351supergreenbean
SQL Server 版2004下半年度专家榜(
揭帖
时间为2004年下半年度)
SQL Server 版2004下半年度专家榜(
揭帖
时间为2004年下半年度) 2004年下半年度 指 2004年6月(含)到 2004年12月(含)依次为账号、所得专家分、 注册时间。 这里统计的 SQL Server 版 包括 SQL 非技术区 论坛的得分。zjcxc3165002003年3月pbsql370442001年5月
[VB.NET]送分
问题
!!!我在窗体上利用鼠标动态的画矩形,就像QQ截图的矩形选框那样.可是怎么清除之前画的矩形留下的痕迹?
<script type="text/javascript"
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章