1,以下代码中的两个sizeof用法有问题吗?
sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。注意:数组名作为函数参数时,退化为指针。数组名作为sizeof()参数时,数组名不退化,因为sizeof不是函数。
请问以下代码有什么问题
int main()
{
char a;
char *str = &a;
strcpy(str,”hello”);
printf(str);
return 0;
}
没有为str分配内存空间,将会发生异常
问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
Strcpy的在库函数string.h中,程序的主要程序在于越办进行内存读写导致程序崩溃。
2,const char* s = “AAA”;
Printf(“%s”,s);
S[0] = ‘B’;
Printf(“%s”,s);
“AAA”是字符串常量,S是指针,指向这个字符串常量,所以声明s的时候就有问题。
Const char* s =”AAA”,然后又因为是常量,所以对S[0]的赋值操作是不合法的。
3,Char szstr[10];
Strcpy(szstr,”0123456789″);
产生什么结果?为什么?
正常输出,长度不一样,会造成非法的OS,覆盖别的内容
4,交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;
两种解法,一种是用算术算法,一种是用^(异或)
a = a+b;
b = a-b;
a = a-b;
or
a = a^b;//只能对int ,char
b = a^b;
a = a^b;
or
a ^= b ^=a;