1. 说说下列声明的不同之处
char *a = "abc";
char b[] = "abc";
char c[3] = "abc";
a是一个字符型指针变量,起内容为字符串”abc”的首地址,字符串”abc”存放在常量区。
b[ ]占4个字节,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’
c[3]占3个字节,c[0]=’a’ ,c[1]= ‘b’,c[2]= ‘c’
2.以下为Windows NT下的32位C程序,请填空 。
例如:int i; long int j; char k; sizeof(i) = 4; sizeof(j) = 8; sizeof(k) = 1;
在32位系统下,整形所占的字节数是4。长整形所占的字节数是8,字符型所占的字节数是1。
(1)
typedef struct
{
int iPara1;
union
{
char iPara2[5];
int iPara3;
char iPara4;
} Params;
char cPara5;
char cPara6[12];
} TEST_INFO_T;
TEST_INFO_T stTestInfo;
请计算
sizeof (stTestInfo ) = 28
(2)
void Func ( char str[3])
请计算
sizeof( str ) =4
(3)
void *p = malloc( strlen(“hello world”) );
请计算
sizeof ( p ) =4
(4)
char str[] = “Hello” ;
char *p = str ;
int n = 10;
请计算
sizeof (str ) =6
sizeof ( p ) =4
sizeof ( n ) =4
3. 请问运行此程序后,在终端上输出的结果是什么?
char acFileName_p[2][50]; /*全局变量,在整个程序运行期间有效*/
int FileExists(char* name)
{
int i;
for(i = 0; i < 2; i++)
{
if( strcmp (( char*) name, (char*)acFileName_p [i] ) = = 0)
{
return 1;
}
}
return 0;
}
void CheckFileName(char *name)
{
static char suffix[3] = "_1";
if( FileExists(name) )
{
if(suffix[1] != '1')
{
name[strlen(name) - 2] = '\0';
}
strcat(name, suffix);
suffix[1]++;
CheckFileName(name);
}
else
{
suffix[1] = '1';
}
}
main
{
char cString1[50];
char cString2[50];
strcpy(acFileName_p[0], "test1");
strcpy(cString1, "test1");
strcpy(cString2, "test2");
CheckFileName(cString1);
printf("Output1 = %s\n", cString1);
CheckFileName(cString2);
printf("Output1 = %s\n", cString2);
strcpy(acFileName_p[1], cString1);
CheckFileName(cString1);
printf("Output1 = %s\n", cString1);
}
答:
4、请找出下面代码中的所有错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
(1)#include"string.h"
(2)main()
(3){
(4) char*src="hello,world";
(5) char* dest=NULL;
(6) int len=strlen(src);
(7) dest=(char*)malloc(len);
(8) char* d=dest;
(9) char* s=src[len];
(10) while(len--!=0)
(11) d++=s--;
(12) printf("%s",dest);
(13) return 0;
(14)}