C语言 测试
- 数组和指针都可以在定义中用字符串初始化;
- char a[] = "abcd"; //字符串常量初始化的数组是可以修改的
a[0] = 'b';//ok
3
char arr[4][10] = { "abc", "cedff", "tyu", "yue"};
char arrA[2][20];
arrA = arr; //错误。数组名arraA用于确定对象在内存中的位置,也是左值,但它不能作为赋值的对象;
因此,数组名是个不可修改的左值
4
char buf[20] = { "" };
strcpy_s(buf, sizeof(buf), "hello");
strcat_s(buf, 5, "world"); //程序崩溃
5
char buf[20] = { "hello" };
char str[] = "hello"; // 占用了6个字节
printf("%d %d", sizeof(str), strlen(str)); // 6 5
6
以下为Linux下的32 位C 程序,请计算sizeof 的值。
char str[] = “Hello” ;
char *p = str ;
int n = 10;
请计算
(1)sizeof (str ) = (2)sizeof ( p ) =
(3)sizeof ( n ) =
【标准答案】
(1)6、(2)4 、(3 )4
7
void Func ( char str[100])
{
请计算sizeof( str ) =
}
【标准答案】4、
8
void * p = malloc( 100 );
请计算sizeof ( p ) =
【标准答案】4
9 int main()
{
char a;
char str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}
【标准答案】没有为str分配内存空间,将会发生异常
问题出在将一个字符串复制进一个字符变量指针所指
地址。虽然可以正确输出结果,但因为越界进行内在
读写而导致程序崩溃
10、
请问以下代码有什么问题:
char s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
【标准答案】"AAA" 是字符串常量。s是指针,指向这个
字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";
然后又因为是常量,所以对是s[0] 的赋值操作是不合法
的。
11
int (s[10])(int) 表示的是什么啊
【标准答案】int (s[10])(int) 函数指针数组,每个指针
指向一个int func(intp aram) 的函数。
12
c和c++ 中的struct有什么不同?
【标准答案】c和c++ 中struct的主要区别是c中的struct
不可以含有成员函数,而c++ 中的struct可以。c++ 中
struct和class的主要区别在于默认的存取权限不同,
struct默认为public ,而class默认为private
13
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,“hello world”);
}
int main( )
{
char *str=NULL;
getmemory(str);
printf(“%s/n”,str);
free(str);
return 0;
}
会出现什么问题?
【标准答案】程序崩溃,getmemory中的malloc 不能返回
动态内存,free ()对str操作很危险。
14
char szstr[10];
strcpy(szstr,"0123456789");
产生什么结果?为什么?
【标准答案】长度不一样,出现段错误。