博文

error LNK2001: unresolved external symbo(2008-07-16 22:14:00)

摘要:一,问题描述 error LNK2001: unresolved external symbol _WinMain@16 debug/main.exe:fatal error LNK 1120:1 unresolved externals error executing link.exe; 二,产生这个问题可能的原因 1, 你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain. 2. 你用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数。 正在装载数据…… vc这时的默认设置是针对控制台程序的。 三, 解决方法 1.进入project->setting->c/c++, 在category中选择divprocessor,在processor definitions中删除_WINDOWS, 添加_CONSOLE 2.进入project->setting->Link, 在Project options中将/subsystem:windows.改为/subsystem:console 3.保存设置,Rebuild All. ......

阅读全文(2588) | 评论:0

[转载]求大数阶乘算法(2008-03-31 18:18:00)

摘要:#include <stdio.h>
#define max 32767
main()
{
        int n;
        int sum=0;
        int a[max+1];
        int i,j,k,x;
        while(1)
        {
          printf("输入要求阶乘的数:");
                scanf("%d", &n);
                k=0;
                a[k]=1;
                for(i=2;i<=n;i++)
                {

阅读全文(1807) | 评论:0

百度笔试题(2008-02-26 18:10:00)

摘要:1.对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3.(不用考虑数值超出计算机整数界限的问题)

方法1:先求出N!的积MUL,再通过%和/计算尾部连续0的个数

方法2:尾部连续0的个数就是乘积中所含10的因子数,也就是乘积中所含5的因子数.所以我们可以从5开始一直到N,统计其中5的因子数.

int countFactorialZero(int n)
{
    int count=0;
    for(int i=5;i<n;i+=5)
    {
        int j=i;//注意不要直接用i
        while(j%5==0)
        {
            j/=5;
            count++;            
        }
    }
    return count;
}
......

阅读全文(3554) | 评论:0

谈谈C++继承中的重载,覆盖和隐藏(2007-01-26 02:53:00)

摘要:写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常把重载(overload)和覆盖(override)搞错!   我们先来看一些代码及其编译结果。   实例一:
  
  #include "stdafx.h"
  #include <iostream.h>   class CB
  {
  public:
     void f(int)
     {
        cout << "CB::f(int)" << endl;
     }   };
  class CD : public CB
  {
  public:
     void f(int,int)
     {
        cout << "CD::f(int,int)" << endl;
     }      void test()
     {
       f(1);
     }
  };  int main(int argc, char* argv[])
 {
    return 0;
 }
编译了一下
error C2660: 'f' : function does not take 1 parameters
结论:在类CD这个域中,没有f(int)这样的函数,基类中的void f(int)被隐藏   如果把派生CD中成员函数void f(int,int)的声明改成和基类中一样,即f(int),基类中的void f(int)还是一样被覆盖,此时编译不会出错,在函数中test调用的是CD中的f(int)    所以,在基类中的某些函数,如果没有virtral关键字,函数名是f(参数是什么我们不管),那么如果在派生类C......

阅读全文(2178) | 评论:0

memcpy的用法 (2007-01-25 13:07:00)

摘要:关于memcpy的用法
结构如下: void *memcpy(    void *dest,    const void *src,    size_t count ); 作用: 在dest处拷贝src处的字节,并以count来计算需要拷贝的字节数量,进行内存的拷贝。 参数: dest:新的存贮区的开始部位   src:需要拷贝的开始部位    count:需要拷贝的字节数 备注:dest,src,它们都是从各自的地址处进行写入,如果是p而不是&p,那么奖会取得p的值(地址),在该值的地址处进行读出或写入。 例:
  int* intPoint = new int(3333);   int* intPoint1;   memcpy( &intPoint1, &intPoint, 4 );//在intPoint1的地址处写入intPoint地址处的值,也就是intPoint指针值。
  cout << *intPoint1 << endl;//使intPoint1指向了intPoint. 或   int* intPoint = new int(3333);   int intPoint1;   memcpy( &intPoint1, intPoint, 4 );
  cout << intPoint1 << endl;
......

阅读全文(2655) | 评论:0

用C语言进行CGI程序设计(2007-01-23 00:58:00)

摘要:一、CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理, 将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。 CGI接口标准包括标准输入、环境变量、标准输出三部分。 1.标准输入 CGI程序像其他可执行程序一样,可通过标准输入(stdin)从Web服务器得到输入信息,如Form中的数据,这就是所谓的向CGI程序传递数据的 POST方法。这意味着在操作系统命令行状态可执行CGI程序,对CGI程序进行调试。POST方法是常用的方法,本文将以此方法为例,分析CGI程序设计的方法、过程和技巧。 2.环境变量 操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了自己的一些环境变量,用来向CGI 程序传递一些重要的参数。CGI的GET方法还通过 环境变量QUERY-STRING向CGI程序传递Form中的数据。 3.标准输出 CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。 下面是一个简单的CGI程序,它将HTML中Form的信息直接输出到We b浏览器。 #include <stdio.h> #include <stdib.h> main() { int,i,n; printf (″Contenttype:text/plainnn″); n=0; if(getenv(″CONTENT-LENGTH″)) n=atoi(getenv(CONTENT-LENGTH″)); for (i=0;i&......

阅读全文(2486) | 评论:0

C++中的const(一)——和C中的区别(2006-10-31 16:16:00)

摘要: C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码:
#include <iostream>
using namespace std;
int main()
{
 const int a = 1;
 const int b = 2;
 int array[ a + b ] = {0};
 for (int i = 0; i < sizeof array / sizeof *array; i++)
 {
        cout << array[i] << endl;
 }
}
在可以通过编译,并且正常运行.但稍加修改后,放在C编译器中,便会出现错误:
#include <stdio.h>
int main()
{
 int i;
 const int a = 1;
 const int b = 2;
 int array[ a + b ] = {0};
 for (i = 0; i < sizeof array / sizeof *array; i++)
 {
        printf("%d",array[i]);
 }
}
错误消息:
c:\test1\te.c(8): error C2057: 应输入常数表达式
c:\test1\te.c(8): error C2466: 不能分配常数大小为 0 的数组
出现这种情况的原因是:
在C中,const是一个不能被改变的普通变量,既然是变量,就要占用存储空间,所以编译器不知道编译时的值.而且,数组定义时的下标必须为常量.
在C语言中:
const int size;
这个语句是正......

阅读全文(5879) | 评论:1

嵌入式系统C编程中内存操作的相关技巧(2006-10-31 15:53:00)

摘要:关键字const

  const意味着"只读"。区别如下代码的功能非常重要,也是老生长叹,如果你还不知道它们的区别,而且已经在程序界摸爬滚打多年,那只能说这是一个悲哀:

const int a;
int const a;
const int *a;
int * const a;
int const * a const;
  (1) 关键字const的作用是为给读你代码的人传达非常有用的信息。例如,在函数的形参前添加const关键字意味着这个参数在函数体内不会被修改,属于"输入参数"。在有多个形参的时候,函数的调用者可以凭借参数前是否有const关键字,清晰的辨别哪些是输入参数,哪些是可能的输出参数。

  (2)合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改,这样可以减少bug的出现。

  const在C++语言中则包含了更丰富的含义,而在C语言中仅意味着:"只能读的普通变量",可以称其为"不能改变的变量"(这个说法似乎很拗口,但却最准确的表达了C语言中const的本质),在编译阶段需要的常数仍然只能以#define宏定义!故在C语言中如下程序是非法的:

const int SIZE = 10;
char a[SIZE]; /* 非法:编译阶段不能用到变量 */
  关键字volatile

  C语言编译器会对用户书写的代码进行优化,譬如如下代码:

int a,b,c;
a = inWord(0x100); /*读取I/O空间0x100端口的内容存入a变量*/
b = a;
a = inWord (0x100); /*再次读取I/O空间0x100端口的内容存入a变量*/
c = a;
  很可能被编译器优化为:

int a,b,c;
a = inWord(0x100); /*读取I/O空间0x100端口的内容存入a变量*/
b = a;
c = a;
  但是这样的优化结果可能导致错误,如果I/O空间0x100端口的内容在执行第一次读操作后被其它程序写......

阅读全文(2951) | 评论:0