看看你的水平,大家来做做,参与有分

netsnooper 2004-11-13 04:43:36
找错
void test1()
{
char string[10];
char* str1=”0123456789”;
strcpy(string, str1);
}


void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i] =’a’;
}
strcpy(string, str1);
}

void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}


2.找错
#define MAX_SRM 256

DSN get_SRM_no()
{
static int SRM_no;
int I;
for(I=0;I<MAX_SRM;I++,SRM_no++)
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}


3. 写出程序运行结果

int sum(int a)
{
auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+C);
}

void main()
{
int I;
int a=2;
for(I=0;I<5;I++)
{
printf(“%d,”, sum(a));
}
}

4.

int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
则func(1)=?

5:
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=?

6.
定义 int **a[3][4], 则变量占有的内存空间为:_____
...全文
693 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
xunknown 2004-11-16
  • 打赏
  • 举报
回复
晕倒,,,,
一群笨蛋,,,,,,,,,,
实际碰到这样的问题,,,,
干嘛不用编译器去找错,,,,,,
这么测试没有多大的实际意义,,,,,,,
不就是表示出你能够用眼睛和自己判断出一些错误嘛,,,,
不久是你经验丰富一点嘛,,,,,,,
有什么好炫耀的????????、

实际点,,,,,哥们,,,,,,,,

古语有云:工欲善其事,必先利其器。
这么经典的话,,,,
道出一个什么道理啊?
聪明的人要学会用工具,,,,,,

人类是从不断使用工具发展进步而来的,,,,不要忘记了,,,,,,,,


homeforrose 2004-11-16
  • 打赏
  • 举报
回复
考试题找答案?
Mr.鄧〞 2004-11-16
  • 打赏
  • 举报
回复
1.
test1: string空间不足
test2: str1串缺少'\0'
test3: strlen(str1)==10时 string不足
2.SRM_no未初始化
3. 8,10,12,14,16,
4、int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
则func(1)=?

我觉得题目应该是下面这样子:
int func(int a)
{
int b;
switch(a)
{
case 1:b=30;
case 2:b=20;
case 3:b=16;
default:b=0;
}
return b;
}
则func(1)=?

答案为:fun(1)=30
-----------------------------
5. 2
6. 4byte
sasdaa 2004-11-15
  • 打赏
  • 举报
回复
void test1()中string[10]理论上的确空间不够
但实际中,在VC6.0下编译和运行都没问题
谁能解释一下?
的确如此,这可能是编译器的原因
tanchao1983 2004-11-15
  • 打赏
  • 举报
回复
不明白,学习中... ...
先帮忙顶一下!
请高手写出答案,谢谢了。
windandrain 2004-11-15
  • 打赏
  • 举报
回复
楼上说得是,那个‘\0’系统给加的,数组定义的长度不包括。

3.
int sum(int a)
{
auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+C);
}

void main()
{
int I;
int a=2;
for(I=0;I<5;I++)
{
printf(“%d,”, sum(a));
}
}
8 10 12 14 16

4.
0 不考虑编译器所做的工作。

5.
2

6.
24




C_020511 2004-11-15
  • 打赏
  • 举报
回复
#include"stdio.h"
#include"string.h"

void main()
{

char string[10];
char* str1="0123456789";
strcpy(string, str1);
printf("%s",string);
}
我这个怎么没问题?
tianyxy 2004-11-15
  • 打赏
  • 举报
回复
mark
houdy 2004-11-15
  • 打赏
  • 举报
回复
前面的三个Test:
1.char string[ 10 + 1 ];
2.没有字符串结束符,结果没有定义。
3.char string[ 10 + 1 ];
tanchao1983 2004-11-15
  • 打赏
  • 举报
回复
第二题的DSN get_SRM_no()中间的DSN是什么意思?

还有return (NULL_SRM);

houdy 2004-11-15
  • 打赏
  • 举报
回复
4.函数内部分配的应该是auto型的变量,若为赋值,值是任意的,所以4的答案是:
任意的int值。
注:其中的switch都差break语句,很危险。
5.问题不大,应该是a[2]=2;
6.int **a[3][4],应该是个三维数组,存放的数据是指向指针的指针,指针类型的变量,无论是指向任何类型的指针,统一都是4个字节,所以,字节数是:3*4*4=48
注:此答案已在Windows平台下用Dev-C++验证过了。
tanchao1983 2004-11-15
  • 打赏
  • 举报
回复
编程环境是windows 2000pro和visual c++6.0
tanchao1983 2004-11-15
  • 打赏
  • 举报
回复
4.b未初始化,有警告信息。
qingyuan18 2004-11-15
  • 打赏
  • 举报
回复
void test1()
{
char string[10];
char* str1=”0123456789”;
strcpy(string, str1);
}
str1指向的地址是只读的
void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i] =’a’;
}
strcpy(string, str1);
}

str的strlen有10个字节,string也只有十个字节,没地方放结束的'\0'字符了

void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
一样的问题,如果str1长度刚好十个字节string放不下
Jupin 2004-11-15
  • 打赏
  • 举报
回复
void test1()
{
char string[10];
char* str1=”0123456789”;
strcpy(string, str1);
}
//string 为存在字符串结束符, 越界访问

void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i] =’a’;
}
strcpy(string, str1);
}
//str1没有按预期结束, 赋往string时内存越界访问

void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}// 当strlen(strl)==10, strcpy会出现越界访问


2.找错
#define MAX_SRM 256

DSN get_SRM_no()
{
static int SRM_no;
int I;
for(I=0;I<MAX_SRM;I++,SRM_no++)
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}


3. 写出程序运行结果

int sum(int a)
{
auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+C);
}

void main()
{
int I;
int a=2;
for(I=0;I<5;I++)
{
printf(“%d,”, sum(a));
}
}

4.

int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
则func(1)=?0 b 未初始化

5:
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=?2

6.
定义 int **a[3][4], 则变量占有的内存空间为:_3*4*sizeof(int**)=12*4=48____

sharkhuang 2004-11-15
  • 打赏
  • 举报
回复
基本上都很简单
netsnooper 2004-11-15
  • 打赏
  • 举报
回复
int **a[3][4],
这句话如何解释呢?
tanchao1983 2004-11-15
  • 打赏
  • 举报
回复
第三个题目编译通不过,有一个错误和一个警告。
不懂,请高手指教!!!
yycec 2004-11-15
  • 打赏
  • 举报
回复
void test1()
{
char string[11]; //char string[10];
char* str1=”0123456789”;
strcpy(string, str1);
}


void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i]='a'; // str1[i] =’a’;
}
strcpy(string, str1);
}

void test3(char* str1)
{
char string[11]; //char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}


2.找错
#define MAX_SRM 256

DSN get_SRM_no()
{
static int SRM_no;
int I;
for(I=0, SRM_no=0;I<MAX_SRM;I++,SRM_no++) //SRM_no 没有初始化
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE) //MY_SRM是数值常量, IDLE未定义
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}


3. 写出程序运行结果

int sum(int a)
{
auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+C);
}

void main()
{
int I;
int a=2;
for(I=0;I<5;I++)
{
printf(“%d,”, sum(a));
}
}

//结果如下
8, 10, 12, 14, 16

4.

int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
则func(1)=? //b没有初始化,func(1)=随机数

5:
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=? //2*4 = 8; 因为int型占4个字节

6.
定义 int **a[3][4], 则变量占有的内存空间为:3×4×4 = 48 Byte

破风碎浪 2004-11-15
  • 打赏
  • 举报
回复
高人啊。。。。。哪个带我一下啊。我还没进门呢。我QQ:39726917
求救啊。。。。。。。。。。
加载更多回复(33)

69,373

社区成员

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

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