绝对能够测试你的
C
语言功力的几个问题
!
很少有真正精通了
C
语言编程的学员,一般都有或多或少概念不是完全清楚的问题,特别是一些需要丰富的实战经验才能体会和明白的问题,如字符串,指针,类型转换,定义指向函数的指针类型,这也是导致学习
C
困难的一个原因。下面有几个简单测试将能发现你对
C
语言的掌握情况。
1 ) int x=35;
char str[10];
// 问: strlen(str) 和 sizeof(str) 的值分别是多少?
1 ) int x=35;
char str[10];
// 问: strlen(str) 和 sizeof(str) 的值分别是多少?
答:
strlen(str)
值不确定,
strlen
根据
'/0'
确定字符串是否结束
。
sizeof(str)=10 sizeof 一个数组为数组长度
sizeof(str)=10 sizeof 一个数组为数组长度
strcpy(str,"www.it315.org"/* 共 13 个字母 */);
// 问 : 此时 x 和 strlen(str) 的值分别是多少?
答:
x
为
35
strcpy(char* dest, const char* src)
根据 src 来复制 dest ,依照 src 的 '/0' 决定复制的长度,而 dest 必须要提供足够的长度, 这里会引起溢出, strlen 返回 13 ,但是数组外部的数据已经被破坏
strcpy(char* dest, const char* src)
根据 src 来复制 dest ,依照 src 的 '/0' 决定复制的长度,而 dest 必须要提供足够的长度, 这里会引起溢出, strlen 返回 13 ,但是数组外部的数据已经被破坏
strlen
的值为
13,
在
VC++
环境下
,x
的值是要改变的
(
其他编译器下没试
,).
虽然表面上看来
,
在程序中并没有修改
x
的值
,
但是实际运行的结果是上面的
x
的值发生了修改
,
这是因为
strcpy
以后
,
把
多余的数据拷贝进了
str
的邻居
(int
类型的
x)
中
,
所以
x