c****n 发帖数: 105 | 1 I just did some test. See the program below:
===============================
#include
#include
#include
int main(int argc, char* argv[])
{
char *a="abcde";
char b[]="abcde";
char* c=(char*)malloc(6);
strcpy(c, a);
printf("%lx, %lx, %lx\n", a, b, c);
printf("%c %c %c\n", a[0], b[0], c[0]);
a[0] = 'f';
printf("%s\n", a);
return 0;
}
==============================
output:
80486d0, bfc74b96, 804b008
a a a
Segmentation fault
char *a="abcde", the compiler generate a str |
|
M*m 发帖数: 141 | 2 来自主题: Programming版 - 一道面试题 I am confused by (A *)0 -> B,
#include
#define X(y, z)((int)&(((y*)0)->z))
#define X1(y, z)((int)&(((y*)1)->z))
#define X2(y, z)((int)&(((y*)2)->z))
struct A{
int AA;
int AB;
int AC;
};
int main(){
printf("%d %d %d\n", X(A,AC), X1(A,AC), X2(A,AC));
}
the result is 8, 9, 10. |
|
c****6 发帖数: 22 | 3 我在windows下编译的gsl库,试了几个sample program,
其他的没发现问题,但是用到random number generator的时候
编译出现如下错误,程序是gsl manual里提供的例子。
error: unresolved external symbol _gsl_rng_default
#include
#include
int
main (void)
{
const gsl_rng_type * T;
gsl_rng * r;
int i, n = 10;
gsl_rng_env_setup();
T = gsl_rng_default;
r = gsl_rng_alloc (T);
for (i = 0; i < n; i++)
{
double u = gsl_rng_uni |
|
p**********g 发帖数: 9558 | 4 #include
#include
int depth[10];
int idx=0;
void display(void)
{
int i;
for(i=0;i
printf("%d+", depth[i]);
printf("\n");
}
void sum(int in, int delta)
{
int i;
int op = in;
int step = 1;
if(delta<0) return ;
if(delta==in)
{
depth[idx++] = delta;
display();
depth[--idx] = 0;
}
else
while(1)
{
step = 10*step;
if(op/step)
{
if( |
|
|
|
f*******y 发帖数: 988 | 7 学了C++就不要再用stdio里面的东西了
格式的话我推荐boost的format库 |
|
|
s***e 发帖数: 122 | 9 看来是因为这一句:
fread(&sacbin, sizeof(header), 1, fpr);
要改成
fread(&sacbin, sizeof(struct header), 1, fpr);
如果你是用C编译器的话。
当然你也可以定义struct header为typedef struct header {...} HEADER; 那样你就可以用sizeof(HEADER)了。
下面这段代码是可以编译运行的。
#include
struct header {
int hd;
};
struct sac
{
struct header hdr;
float * data;
};
void test2() {
const char * const fn = "test2.txt";
FILE* fpw = fopen(fn, "w");
struct header hdr;
hdr.hd = 18;
fwrite(&hdr, sizeof(hdr), 1, fpw);
fclose(fpw |
|
s***e 发帖数: 122 | 10 来自主题: Programming版 - 问个面试题 这个就是一次遍历,但是有一些bug, 没有考虑n<0以及链表长度小于n+1的情况。下面
是一些修改以及测试用例。
#include
struct iNode {
int value;
iNode * next;
iNode() { value = 0; next = NULL; }
iNode(int v) : value(v) { next = NULL; }
iNode(int v, iNode* nx) : value(v), next(nx) {}
};
iNode * getNthLastNode(iNode * head, int n) {
if (head == NULL || n < 0) return NULL;
iNode* pfirst = head;
for (int counter = 0; counter < n; counter++) {
if (pfirst->next != NULL)
pfirst = pfirst->next; |
|
s***e 发帖数: 122 | 11 我对你对这个Warning/Error的理解有不同看法,我觉得那是因为this在new完成前是不
存在的,不过我同意你说的编译器给加上了static,嗯,我事实上同意了this在static函数里不存在:P
事实上,我用VC6, VS2008, g++ 4.3.1都测试了一下,的确operator new不管是不是
static都可以编译通过,而且连warning都没有。
我猜测可能是C++标准里面就是这么说的吧。
#include
#include
class NewTest
{
public:
NewTest() {}
virtual ~NewTest() {}
public:
void* operator new(size_t size) {
void *ptr = (void *)malloc(size);
printf("my own new\n");
return ptr;
}
void operator delete(void |
|
s***e 发帖数: 122 | 12 为了实现多态,C++里增加了virtual这么一个关键字来修饰类的成员函数。
如果一个成员函数是virtual的,那么当你通过一个对象调用它的时候,无论你用的指
针是基类还是子类,都会调到这个对象的实际类型所实现的这个函数。
你可以跑一下下面这个程序看看virtual和非virtual的区别,然后你就知道shadow为什
么和virtual这么相关了。
#include
class A {
public :
void f() { printf("A::f()\n"); };
virtual void g() { printf ("A::g()\n"); }
};
class B : public A {
public:
void f() { printf("B::f()\n"); }
virtual void g() { printf("B::g()\n"); }
};
void main() {
B b;
A* a = &b;
a->f();
a->g( |
|
O******e 发帖数: 734 | 13 There is the # operator in cpp/fpp, but I don't think that this is
what you want.
This would be preprocessed, not C or Fortran language proper.
#define show_int(x) printf(#x" = %d\n",x)
#include
int main () {
int x=5;
show_int(x);
return(0);
}
#define show_int(x) print'(a," = ",i0)',#x,x
program main
integer::x=6
show_int(x)
stop
end program main |
|
l*****c 发帖数: 1153 | 14 你要都知道干什么?编百科全书?知道自己用的不就行了? |
|
i***c 发帖数: 301 | 15 book:
visual studio 2005(2008)unleashed |
|
z***e 发帖数: 5393 | 16 sln是项目文件;
suo那个是记录你的环境设置;
pdb是拿来debug的,大概是把executable code和source code对应起来;
advanced windows debugging里头可能有说。 |
|
s***e 发帖数: 122 | 17 楼主这个说要union也是让我百思不得其解,不过洗个澡出来发现了另外一个好办法,
就是用引用:)
#include
class vec {
public:
double xa[3];
double & x;
double & y;
double & z;
public:
vec() : x(xa[0]), y(xa[1]), z(xa[2]) {}
~vec() {}
};
void main() {
vec v;
v.x = 1;
v.y = 2;
v.z = 3;
printf("%f, %f, %f\n", v.xa[0], v.xa[1], v.xa[2]);
} |
|
y*h 发帖数: 107 | 18 经常在用到VS时, 碰到类似下面的变量, 请教一下如何set value and check
value of $(IntDir)
$(IntDir)\BuildLog.htm |
|
r*******y 发帖数: 290 | 19 environment variables?
#include
char * getenv ( const char * name );
int system ( const char * command ); |
|
y*h 发帖数: 107 | 20 在PROJECT PROPERTY里遇到的用来设置输入输出路径的variables
好象是VS的environment variables, 不是OS的environment variables. 因为DOS
下用SET 命令没有这个.
怎么修改value呢? |
|
k**f 发帖数: 372 | 21
To check the value of these environment variables,
get to the "Property Pages" dialog box, select any
property that uses the environment variables, such
as "Output Directory" in the "General" page, click
the pull-down arrow on the far right and select "Edit"
to get a new dialog box, then click the "Macro" button.
I don't think you can change these macros directly,
because they reflect either the installation location
of VS, or the project file location. However, you can
change any settings that |
|
s********1 发帖数: 581 | 22 Thanks for your reply.
为什么在main.c用standard library 中的函数,例如printf时,只需在main.c 中
#include , 在compile 时完全不必提及printf 所在的 .c source file???
chunks,
line.
or |
|
p*******n 发帖数: 273 | 23 多谢. 发现free()之后还可以对原来的内存访问,free的作用到底是什么?
#include
#include
char *mkarray()
{
char *a;
a=(char *)malloc(4*sizeof(char));
a[0]='a';a[1]='r';a[2]='e';a[3]='y';
return (a);
}
int main()
{
char *b,*c;
b=mkarray();
c=b+2;
free(b);
printf("%c %c %c %c\n",b[0],b[1],b[2],b[3]);
printf("%c %c \n",c[0],c[1]);
return 0;
}
输出结果是
a r e y
e y |
|
e******r 发帖数: 220 | 24 When right click mouse on some variable name, then two options show up.
surround with
insert snippet
What is the meaning of them ? thanks |
|
v******n 发帖数: 421 | 25 guess you are too lazy to just try them... |
|
e******r 发帖数: 220 | 26 what kind of project information does it store ?
Is .csproj file created by Visual Stdio or by developer ?
thanks
|
|
b***e 发帖数: 1419 | 27 #include "stdio.h"
class Bit {
public:
int max;
int direction;
int value;
Bit* higherBit;
Bit(int max, Bit* higher);
bool inc();
void changeDirection();
};
Bit::Bit(int max, Bit* higher) {
this->max = max;
this->direction = 1;
this->value = 0;
this->higherBit = higher;
}
void Bit::changeDirection() {
this->direction = 1 - this->direction;
}
bool Bit::inc() {
switch(this->direction) {
case 1:
if (this->value < this->max) {
this->value++;
return true;
|
|
m********g 发帖数: 9 | 28 在一本书上看到的
就是用bitmap来做sorting的经典题
实在不明白这个什么意思 a[i>>SHIFT] |= (1<<(i & MASK))
后面那个( 1<<(i&MASK) )是什么意思?
codes在下面
#include
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
void set(int i) { a[i>>SHIFT] |= (1<<(i & MASK)); }
void clr(int i) { a[i>>SHIFT] &= ~(1<<(i & MASK)); }
int test(int i){ return a[i>>SHIFT] & (1<<(i & MASK)); } |
|
b***y 发帖数: 2799 | 29 ☆─────────────────────────────────────☆
DVD (时不我待) 于 (Sat Nov 1 22:48:07 2008) 提到:
发信人: siriusliu (天狼), 信区: JobHunting
标 题: 一道C++面试题
发信站: BBS 未名空间站 (Fri Oct 31 15:29:55 2008)
给了一个code:
#include
class A {
public:
A(){f();}
virtual void f(){printf("A");}
};
class B : public A {
public:
B(){f();}
virtual void f(){printf("B");}
};
int main()
{
B myB;
A *myBP;
B *myBP2;
myBP=new B( |
|
b***y 发帖数: 2799 | 30 ☆─────────────────────────────────────☆
baodong (馋懒大魔包) 于 (Fri Sep 23 13:28:48 2005) 提到:
Hello, I do not understand why the following code only wrote the test.txt once
. If I comment out "if (!fpTest)", it works. Why is it different with "if (!
fpTest)"???
#include
int main(void)
{
FILE* fpTest = NULL;
for (int i=0; i<5; i++)
{
if (!fpTest)
fpTest =fopen("test.txt", "w");
fprintf(fpTest, "%d\n", i);
fflush(fpTest);
fclose(fpT |
|
g*********i 发帖数: 89 | 31
BUFSIZ
defined in stdio.h |
|
m****u 发帖数: 3915 | 32 例如这样一个程序:
#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
clock_t c_start,c_end;
double duration;
c_start = clock();
//My code here ....
c_end = clock();
duration = (double)(c_end - c_start)/CLOCKS_PER_SEC ;
return 0;
}
在32bit机器上,当执行时间过长时(>2000秒), clock()函数会归零重新计时,导致最
后duration为负数,各位大大有什么解决方法不?
(我知道用time()和difftime()可以,但是我现在在一个公用机器上run,用这两个函
数会受其他进程影响,导致结果不准确,有没有用clock(),但是不溢出的方法)
多谢 |
|
t****t 发帖数: 6806 | 33 iostream是为template服务的. 如果不用template,当然是stdio好用. |
|
W*W 发帖数: 293 | 34 我现在用 Analyze 带的AVW library编一些图像处理的程序,里面基本是C写的程序,
有不同的功能可以调用,刚刚上手遇到很多问题。 比如不知道如何用里面一个函数打
开一个图像文件:
#include
#include "AVW.h" 这是函数库的head file
#include "AVW_ImageFile.h"
int main()
{
AVW_ImageFile *filename;
AVW_Image *image;
filename = AVW_OpenImageFile("C:/program files/avw/test.jpg", "r");
image = AVW_ReadImageFile(filename,NULL);
AVW_ShowImage(image);
system("pause");
return 0;
}
我用的是 VC++ 2008 express, 在project里面添加了AVW的library和link文件, 编
译和链接都没有问题, 但运行的时候就是读不出图,提示的war |
|
J*******g 发帖数: 381 | 35 小弟就是想reverse一个字符串,但是下面的程序在
text[i] = text[total-1-i];
这一句出错了,运行告诉bus error。 哪位大虾可以指点一下么? 多谢!
#include
#include
#include
using namespace std;
int main (int argc, char * const argv[]) {
char *text = "everyone is created equal, but some are more equal than
others.";
int total = strlen(text);
char tmp = 0;
for(int i=0; i
{
tmp = text[i];
text[i] = text[total-1-i];
text[total-1-i]= tmp; |
|
e********d 发帖数: 1202 | 36 #include
main(int agrc, char * argv[]){
int a = 4;
printf("%f\n",a);
printf("%u\n",a);
printf("%f,%u\n",a,a);
printf("%d,%f,%u\n",a,a,a);
printf("%d,%f,%u,%u\n",a,a,a,a);
printf("%f,%u\n",(float)a,(unsigned)a);
}
gcc, mac osx, 输出如下,
0.000000
4
0.000000,2413823420
4,0.000000,0
4,0.000000,4,0
4.000000,4
请教中间几行输出为什么是这样. |
|
P********e 发帖数: 2610 | 37 %f读4,如果是按照float格式读,是接近0的一个数 e - 128?之类的
你可以把4 cast 到float,然后再看byte representation. exp的位有一个127的offset
%u读a, 我比较奇怪为什么不是4,解释不了
而且,倒数第二行,同样%u%u,第一次是4,第二次0
#include
main(int agrc, char * argv[]){
int a = 4;
printf("%f\n",a);
printf("%u\n",a);
printf("%f,%u\n",a,a);
printf("%d,%f,%u\n",a,a,a);
printf("%d,%f,%u,%u\n",a,a,a,a);
printf("%f,%u\n",(float)a,(unsigned)a);
}
gcc, mac osx, 输出如下,
0.000000
4
0.000000,2413823420
4,0.000000,0
4,0.000000,4,0
4.000000,4
请教中间几行输出为什么是这样. |
|
|
j**7 发帖数: 771 | 39 嗯。
不过我这些个并行的线程要调用自己写的一个比较大的函数,而且要调用很多次,倒没
有标准库里的函数,这样的话是不是就一定不会泄露呢??
查到一个说法:
如果在除主线程之外的任何线程中进行一下操作,你就应该使用多线程版本的C
runtime library,并使用_beginthreadex和_endthreadex:
1 使用malloc()和free(),或是new和delete
2 使用stdio.h或io.h里面声明的任何函数
3 使用浮点变量或浮点运算函数
4 调用任何一个使用了静态缓冲区的runtime函数,比如:asctime(),strtok()或rand()
这么说来基本啥都不能用了。beginthread能用waitForSingleObject来等待么? |
|
y****e 发帖数: 23939 | 40 I want to start 3 threads, but I always get only one.
#include
#include
int main(int argc, char *argv[]){
printf("Hello from master thread.\n");
int num = 3;
omp_set_num_threads(num);
#pragma omp parallel num_threads(3)
{
printf("Team member %d reporting from team of %d\n",
omp_get_thread_num(),omp_get_num_threads() );
printf("Max number of threads for this system is: %d\n",
omp_get_max_threads() );
printf("Number of process |
|
s****n 发帖数: 700 | 41 1 #include
2
3 int mat[10][20];
4
5
6 void func(float **p){
7 int i,j;
8
9 for(i=0; i<10; i++)
10 for(j=0; j<20; j++)
11 printf("%d\n", p[i][j]);
12
13 }
14
15
16 int main()
17 {
18 int mat[10][20];
19 int i,j;
20
21 for(i=0; i<10; i++)
22 for(j=0; j<20; j++)
23 mat[10][20] = i + j;
24
25 func(mat);
26 return 0;
27 }
似乎错误是int **p不能access MAT数组的内容, 应该怎么修改才可以呢? 非常感谢 |
|
O*******d 发帖数: 20343 | 42 #include
#include
static char buffer[32];
void Combination(int currentLen, char *charSet, int n)
{
int i;
for(i = 0; i < n; ++i)
{
buffer[currentLen] = charSet[i];
buffer[currentLen + 1] = '\0';
printf("%s\n", buffer);
Combination(currentLen + 1, charSet + 1 + i, n - 1 - i);
}
}
void main()
{
char charSet[] = "abcdefg";
Combination(0, charSet, strlen(charSet));
} |
|
H*M 发帖数: 1268 | 43 为什么最后一个输出为400?
好奇怪,我还以为应该是垃圾.
谁给解释下,谢了
这个b在程序里起什么作用?
//test2
//////////////////////////////////////
#include
int main()
{
int a[5]={10, 20, 30, 40, 50};
int b[5]={100, 200, 300, 400, 500};
int *ptr = (int *)(&a+1);
int *t = (int *)(&a -1);
printf("%d %d %d \n", *(a+1), *(ptr-1), *(t+1));
} |
|
J*******i 发帖数: 2162 | 44 代码如下
#include
#include
struct Port {
char name[8];
};
struct Node {
char name[8];
uint32_t num_of_ports;
struct Port ports[0];
};
int main() {
struct Node x;
printf("size=%u, ptr(x)=%u, ports=%u, ptr(ports)=%u, "
"ptr(ports[0])=%u\n", sizeof(struct Node), (unsigned int)&x,
(unsigned int)x.ports, (unsigned int)&(x.ports),
(unsigned int)&(x.ports[0]));
return 0;
}
在这个Node里面有一个struct Port ports[0]的结构,用来动态的表示可变长度的一个
数组
我能够理解他指向的实际地址应该是&x+ |
|
s*****n 发帖数: 461 | 45 为什么line1合法,line2非法?
#include
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main(void)
{
printf("\n%s", g(f((1,2),3)) ) ; /*line1*/
printf("\n%s", h(f((1,2),3)) ) ; /*line2*/
} |
|
g****y 发帖数: 436 | 46 【 以下文字转载自 JobHunting 讨论区 】
发信人: ggplay (dfdsf), 信区: JobHunting
标 题: 请教一个C内存泄露问题
发信站: BBS 未名空间站 (Mon Jan 11 10:02:18 2010, 北京)
源代码就是一个2d数组的分配和删除:
编译运行以后发现,程序占用内存按照 4K/单位时间 的速度增加,请问这是怎么回事
呢?
#include
#include
int main()
{
while(1){
int i; /* general purpose variable used for loop index */
int j; /* general purpose variable used for loop index */
int **a; /* this is the array name */
int size_x; /* this variable will be used for the first dimension */
in |
|
c**********e 发帖数: 2007 | 47 #include
#include
#include
main ()
{
pid_t pid;
pid=fork();
if (pid < 0)
printf("error in fork!\n");
else if (pid == 0)
printf("i am the child process, my process id is %d\n",getpid());
else
printf("i am the parent process, my process id is %d\n",getpid());
}
output:
i am the child process, my process id is 9832
i am the parent process, my process id is 9832 |
|
e******d 发帖数: 310 | 48 In the following code for Singleton, why will the destructor be
called again and again??
Thank you.
=============================
#include "stdio.h"
class Singleton
{
public:
static Singleton* create_obj();
~Singleton()
{
printf("Destor is called \n");
if(psig != NULL)
delete psig;
}
private:
Singleton() { printf("Contor is called \n"); }
static Singleton* psig;
};
Singleton* Singleton::psig = NULL;
Singleton* Singleton::create_ |
|
X****r 发帖数: 3557 | 49 希望我没有理解错你的意思,就是这五对的顺序不相关,每对之内的顺序也不相关。
比如
1 10, 2 9, 3 8, 4 7, 5 6
和
1 10, 2 9, 3 8, 5 6, 7 4
是同一个结果,不希望重复列出。
其实用递归也不太复杂:
#include
void print(int x[], int n) {
int i;
for (i = 0; i < n; i += 2) {
if (i) {
printf(", ");
}
printf("%d %d", x[i], x[i+1]);
}
printf("\n");
}
void print_pairs(int x[], int n, int i) {
if (i == n) {
// Get one set of result, do something on x[].
print(x, n);
} else {
int tmp, j;
for (j = ++i; j < n; j++) {
if ( |
|
a****y 发帖数: 86 | 50 一个非常简单的程序测试.
在D盘, test.c
#include
int main()
{
printf("hello!\n");
return 0;
}
用mingw编译.cmd命令行
c:\MinGW\bin\gcc d:\test.c -o d:\test.exe
没有输出结果.一片空白.但是如果我去点test.exe文件,黑框只闪一下就自动关闭了.但
是如果仔细看
会发现黑框里面第一行有我要的输出结果.
不知道为什么. 请教大家.谢谢! |
|