用c往另一个程序里面实现输入
如题 谁能说下思路 有代码更佳
在显示汉字时常常字少没有感觉,但字多了就显示不全。只要在程序中填加一句就可以了。如:
#include <graphics.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <stdlib.h>
#include <conio.h>
#define ROW 1 /* 纵坐标放大倍数 */
#define COL 2 /* 横坐标放大倍数 */
void main()
{
int x,y;
char *s="汉字显示程序"; /* 需要显示的汉字 */
FILE *fp;
char buffer[32]; /* buffer用来存储一个汉字的点阵字节 */
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
int gd=DETECT,gm;
initgraph(&gd,&gm," "); /* 屏幕初始化 */
/* 打开汉字库文件,该字库可以在ucdos中找到,这里需要确保文件路径正确 */
if ((fp=fopen("hzk16","rb"))==NULL)
{
/* 找不到字库文件,出错处理 */
printf("Can’t open haz16,Please add it");
getch();
closegraph();
exit(0);
}
x=20; y=100; /* 显示开始位置设置 */
while(*s) /* 字符串以’\0′结束,这里将其作为字符串结束的标志 */
{
qh=*(s)-0xa0;
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;/* 计算该汉字在字库中偏移量 */
fseek(fp,offset,SEEK_SET); /* 将文件指针移到对应位置 */
fread(buffer,32,1,fp); /* 取出汉字32字节的点阵字模存入buffer中(一个汉字)*/
/* 将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字 */
for (i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++) /* 两个字节才能表示一行16*16 */
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if (((buffer[i*2+j]>>(7-k))&0×01)!=0) /* 该位为1才显示 */
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);
s+=2; /* 因为一个汉字内码占用两个字节,所以s必须加2 */
x+=30; /* 下一个汉字的显示位置向右移动一定距离 */
}
getch(); /* 敲击键盘才使程序退出 */
closegraph();
}
可以变为
#include <graphics.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <stdlib.h>
#include <conio.h>
#define ROW 1 /* 纵坐标放大倍数 */
#define COL 2 /* 横坐标放大倍数 */
void main()
{
int x,y;
char *s="汉字显示程序"; /* 需要显示的汉字 */
FILE *fp;
char buffer[32]; /* buffer用来存储一个汉字的点阵字节 */
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
int gd=DETECT,gm;
initgraph(&gd,&gm," "); /* 屏幕初始化 */
/* 打开汉字库文件,该字库可以在ucdos中找到,这里需要确保文件路径正确 */
if ((fp=fopen("hzk16","rb"))==NULL)
{
/* 找不到字库文件,出错处理 */
printf("Can’t open haz16,Please add it");
getch();
closegraph();
exit(0);
}
x=20; y=100; /* 显示开始位置设置 */
while(*s) /* 字符串以’\0′结束,这里将其作为字符串结束的标志 */
{
qh=*(s)-0xa0;
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;/* 计算该汉字在字库中偏移量 */
fseek(fp,offset,SEEK_SET); /* 将文件指针移到对应位置 */
fread(buffer,32,1,fp); /* 取出汉字32字节的点阵字模存入buffer中(一个汉字)*/
/* 将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字 */
for (i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++) /* 两个字节才能表示一行16*16 */
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if (((buffer[i*2+j]>>(7-k))&0×01)!=0) /* 该位为1才显示 */
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);
s+=2; /* 因为一个汉字内码占用两个字节,所以s必须加2 */
if(x>590) x=20,y+=18;
else x+=30; /* 下一个汉字的显示位置向右移动一定距离 */
}
getch(); /* 敲击键盘才使程序退出 */
closegraph();
}
用C++写个DLL,担供一个函数来被PB调用。
函数传入一个string型参数,返回一个BOLB型数据。
传入的string型数据是PB从XML中读出的(JAVA将image类型用BASE64编码写入XML的)。
也就是用C++写个解析BASE64的DLL.这个如何写,请给出详细代码。谢谢!
问题补充: C++返回应该是BYTE型。
int ints[100]={1, 2, 3};
假设ints在内存中的起始位置是100,那么表达式&ints的值是多少?表达式&ints+4的值是多少?为什么?
&ints是一个指向数组的指针吗?int (*p)[10]呢?
使用GDAL读图片时到底需要把那些dll放到工程下面,具体位置那么弄啊,弄了半天实在是搞不清,后来进去了,编译却出现600多个错误,很多都是‘无法解析外部符号’,求解啊
我用C++Builder2010写了一个Windows服务程序,在服务程序中用WinExec调用了我写的另一个exe程序。
这个系统在Windows xp和2003都很好,但在Windows7上有问题,exe程序无法显示在桌面,但进程管理器中查看有此进程。
当我在服务中WinExec调用一个一般的程序时,系统提示“交互式服务检测”,点击查看后可正常显示。
但我这个exe被我设置不显示在任务栏中,被WinExec时任何反应都没有,仅是进程管理器中有。
帮帮我啊!
在网上查了一些,基本都说是编译器的问题,说是lib没有设置好。而且我之前的一个程序也确实证实了这个问题。那个程序用DEV C++ 编译就可以通过,而用vs208就通不过,所以想跟大家咨询一下再vs2008是如何设置lib的。一般都说是在项目,然后属性那里,调了一段时间也没有调好。
下面vs2008是给出的错误提示:
无法解析的外部符号 "class std::basic_ostream <char,struct std::char_traits <char> > & __cdecl operator < <(class std::basic_ostream <char,struct std::char_traits <char> > &,class WDate const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABVWDate@@@Z),该符号在函数 _main 中被
你先说是编译什么代码出的问题撒
http://topic.csdn.net/u/20090429/22/1dc67d4a-52f9-4018-8407-e211c707e830.html
代码在我之前发的一个帖子里,问题是在5楼。之前这个问题已经解决了的。我是经过反复验证发现是vs2008的问题。
下面的程序,param()这个函数运行后,buf结果为空,param1(),param2(),param3()这3个函数就能实现结果,谁能给详细的讲解下啊
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void param(char *src)
{
src = "abcd ";
}
void param1(char *src)
{
memcpy(src, "abcd ",4);
}
void param2(char *src)
{
*src = 'a ';
*(src+1) = 'b ';
*(src+2) = 'c ';
*(src+3) = '\0 ';
}
void param3(char **src)
{
*src = "abcd ";
}
int main()
{
char *buf = char *)malloc(10 * sizeof(char));
char *buf1 = char *)malloc(10 * sizeof(char));
char *buf2 = char *)malloc(10 * sizeof(char));
char *buf3 = char *)malloc(10 * sizeof(char));
param1(buf1);
param2(buf2);
param3(&buf3);
param(buf);
printf( "buf1 = %s\n ",buf1);
printf( "buf2 = %s\n ",buf2);
printf( "buf3 = %s\n ",buf3);
printf( "buf = %s\n ",buf);
free(buf);
free(buf1);
free(buf2);
free(buf3);
return 0;
}
线性链表删除到最后一个节点head
但还要保留这个链表的head 只把head的存储的内容清空
这个head该如何处理 是把head=NULL就可以把存储的内容清空么?还要有其他的处理么
先后用Businessskinform v8.65,9.20版本,CB2010的,skinDBGird控件不能用,换成其姊妹产品dynamicskinform12.15版本,同样是DBGird控件不能用,异常均在其相应的hpp文件里第564行: __property ColSizingwithLine;,
错误是:[BCC32 Error] spDBGrids.hpp(564): E2303 Type name expected,
将第564行注释起来,就可以编译成功!
但注释起来似乎不是解决的根本办法吧?请高手帮助。
下面的代码是书中<<C程序设计语言>>章节1.9字符数组P21页的范例,其中有:
for (i=0;i<lim-1 && (c=getchar())!=EOF && c!=’\n’;++i)
s[i]=c;
在书中的2.6章节,P32页,引用的时候是:
for (i=0;i<lim-1 && (c=getchar())!=’\n’ && c!=EOF;++i)
我的问题是:
在函数getline中执行for语句时如果直接输入回车,那么循环结束,此时getchar()还运行吗?为什么?
我在其他地方提问时有人说直接输入回车循环结束时getchar()不运行了,可我测试的时候感觉还在运行;另外有人说程序直接输入回车就退出了,可在我的机器上是正常的。谁能告诉我这段程序有没有问题?
/***********************************************************************
名称: <<C程序设计语言>>章节1.9字符数组
类型: Hello (Hello.c)
author: <<C程序设计语言>>
date:
功能: 读入一组文本行并把最长的文本行打印出来
***********************************************************************/
#include <stdio.h>
#define MAXLINE 1000 /* 最大输入行的大小 */
int getline (char line[],int maxline);
void copy (char to[],char from[]);
/* 打印最长的输入行 */
main()
{
int len; /* 当前行长度 */
int max; /* 至目前为止所发现的最长行的长度 */
char line[MAXLINE]; /* 当前输入的行 */
char longest[MAXLINE]; /* 用于保存最长的行 */
max=0;
while ((len=getline(line,MAXLINE))>0)
if (len>max){
max=len;
copy(longest,line);
}
if (max>0) /* 有一行 */
printf ("%s",longest);
return 0;
}
/* getline:将一行读入s中并返回其长度 */
int getline (char s[],int lim)
{
int c,i;
for (i=0;i<lim-1 && (c=getchar())!=EOF && c!=’\n’;++i)
s[i]=c;
if (c==’\n’){
s[i]=c;
++i;
}
s[i]=’\0′;
return i;
}
/* copy:从from拷贝到to;假定to足够大 */
void copy(char to[],char from[])
{
int i;
i=0;
while ((to[i]=from[i])!=’\n’)
++i;
}
/*——————运行:—————–*/
/* 第一个测试直接输入回车然后ctrl+z退出 */
D:\Dev-Cpp>hello.exe
^Z
?=
/* 第二个测试输入回车然后输入字符串ctrl+z退出 */
D:\Dev-Cpp>hello.exe
ok?
^Z
ok?
D:\Dev-Cpp>
我用malloc申请了过多的内存,比如
*p =(type *)malloc(sizof(type)* 100);
多申请了50个,然后我想释放;
free(p+50);
结果报错,请问是怎么回事啊?
例如:
template<class T>
class OP
{
private:
friend int operator/(int divA, vector<T> divB);
};
编译器会提示:
E:\Program\My Pro\t_CB_OVERLOAD\main.cpp|9|warning: friend declaration ‘int operator/(int, std::vector<T, std::allocator<_CharT> >)’ declares a non-template function|
E:\Program\My Pro\t_CB_OVERLOAD\main.cpp|9|note: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) |
||=== Build finished: 0 errors, 1 warnings ===|
我用gcc编译的。
我现在就是要在一个模板类中用友元重载operater/ 大家帮帮我吧!
#include<iostream.h>
char *A(const char* pstr)
{
int len=strlen(pstr);
char a[100];
int i=0;
char tmp;
while((*pstr++)!=’\0′)
a[i++]=*pstr;
for(int s=0,t=len-1;s<len/2;s++,t–)
{
tmp=a[s];
a[s]=a[t];
a[t]=tmp;
}
return a;
}
void main()
{
char *p="nihao";
char *s;
s=A(p);
cout<<s<<endl;
}
怎么输出来是个乱码?哪里错了吗?请高手指点!
我想选中一个变量,出现此变量的地方,全部高亮,而且颜色我想用深蓝(虽然目前也有提示,可底色非常浅).怎么设置阿,我找了半天没找到,请知道仁兄指点.我记得是可以改的,因为之前一同事的提示的就是深蓝.
MFC程序单击运行时出现“”指令引用的“”内存。该内存不能为“written”。界面根本出不来,之前一直好用的,今早来以运行就出错误,有人知道可能是什么地方引起的嘛?
JPEG parameter struct mismatch: library thinks size is 488, caller expects 520
我查了下 在 jpeg_create_decompress(&cinfo); 这条语句出现了问题
哪位高手能帮我解决下