简单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"能用通式表示吗?盼答!!!
...全文
69 22 打赏 收藏 转发到动态 举报
写回复
用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)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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